trepanning 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +46 -0
- data/NEWS +5 -3
- data/Rakefile +3 -5
- data/app/cmd_parse.rb +1 -1
- data/app/core.rb +1 -1
- data/app/frame.rb +6 -1
- data/app/options.rb +1 -1
- data/app/run.rb +1 -7
- data/bin/trepan +2 -2
- data/processor/command/edit.rb +52 -0
- data/processor/command/eval.rb +1 -1
- data/processor/command/info_subcmd/files.rb +1 -1
- data/processor/validate.rb +1 -1
- data/test/integration/helper.rb +2 -3
- data/test/unit/test-app-run.rb +0 -2
- data/test/unit/test-bin-trepan.rb +0 -17
- data/trepanning.gemspec +2 -2
- metadata +8 -8
data/ChangeLog
CHANGED
@@ -1,3 +1,45 @@
|
|
1
|
+
2011-03-23 rocky <rockyb@rubyforge.org>
|
2
|
+
|
3
|
+
* app/core.rb, app/frame.rb, processor/command/edit.rb,
|
4
|
+
processor/command/info_subcmd/files.rb: Add frame.file. Fix up
|
5
|
+
"edit" command demo code.
|
6
|
+
|
7
|
+
2011-03-23 rocky <rockyb@rubyforge.org>
|
8
|
+
|
9
|
+
* processor/command/edit.rb, processor/command/eval.rb: Add "edit"
|
10
|
+
command
|
11
|
+
|
12
|
+
2011-03-17 rocky <rockyb@rubyforge.org>
|
13
|
+
|
14
|
+
Merge branch 'master' of github.com:rocky/rb-trepanning
|
15
|
+
|
16
|
+
2011-03-17 rocky <rockyb@rubyforge.org>
|
17
|
+
|
18
|
+
* Rakefile, app/options.rb, app/run.rb, bin/trepan,
|
19
|
+
test/integration/helper.rb, test/unit/test-app-run.rb,
|
20
|
+
test/unit/test-bin-trepan.rb: Trepan::ruby_path -> RbConfig.ruby
|
21
|
+
|
22
|
+
2011-03-15 rocky <rockyb@rubyforge.org>
|
23
|
+
|
24
|
+
Dependency administrivia
|
25
|
+
|
26
|
+
2011-03-15 rocky <rockyb@rubyforge.org>
|
27
|
+
|
28
|
+
* trepanning.gemspec: Remove mention of intermediate dev's in
|
29
|
+
dependency.
|
30
|
+
|
31
|
+
2011-03-15 rocky <rockyb@rubyforge.org>
|
32
|
+
|
33
|
+
Merge branch 'master' of github.com:rocky/rb-trepanning
|
34
|
+
|
35
|
+
2011-03-15 rocky <rockyb@rubyforge.org>
|
36
|
+
|
37
|
+
* app/options.rb, trepanning.gemspec: Get ready for release 1.1
|
38
|
+
|
39
|
+
2011-03-15 rocky <rockyb@rubyforge.org>
|
40
|
+
|
41
|
+
* ChangeLog, NEWS: Get ready for release.
|
42
|
+
|
1
43
|
2011-03-12 rocky <rockyb@rubyforge.org>
|
2
44
|
|
3
45
|
* processor/command/help/command.txt, trepanning.gemspec: tabke ->
|
@@ -101,6 +143,10 @@
|
|
101
143
|
All functional, integration and unit tests work again after KPEG
|
102
144
|
refactoring
|
103
145
|
|
146
|
+
2011-03-07 rocky <rockyb@rubyforge.org>
|
147
|
+
|
148
|
+
* processor/main.rb: Handle error when errmsg is borked
|
149
|
+
|
104
150
|
2011-03-07 rocky <rockyb@rubyforge.org>
|
105
151
|
|
106
152
|
* app/file.rb, app/iseq.rb, processor/command/break.rb,
|
data/NEWS
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
March
|
1
|
+
March 28, 2011 (0.1.2)
|
2
|
+
- Release to correct threadrame and trace package dependencies
|
3
|
+
- add "edit" command
|
4
|
+
|
5
|
+
March 15, 2011 (0.1.1)
|
2
6
|
- Revise breakpoint location parsing
|
3
7
|
* Add: break <location> if/unless <condition>
|
4
8
|
* Add: step until <condition>
|
@@ -12,8 +16,6 @@ March 15, 2011 (0.0.6)
|
|
12
16
|
* trailing "then", "do"
|
13
17
|
- Save and restore some debugger state across a restart
|
14
18
|
- Redo command completion
|
15
|
-
|
16
|
-
Feb 15, 2011 (0.0.5)
|
17
19
|
- "disassemble" command: allow disassembly of specified line numbers
|
18
20
|
- GNU Readline:
|
19
21
|
* Start GNU readline tab (command) completion.
|
data/Rakefile
CHANGED
@@ -41,13 +41,11 @@ desc "same as test"
|
|
41
41
|
task :check => :test
|
42
42
|
|
43
43
|
require 'rbconfig'
|
44
|
-
RUBY_PATH = File.join(RbConfig::CONFIG['bindir'],
|
45
|
-
RbConfig::CONFIG['RUBY_INSTALL_NAME'])
|
46
44
|
|
47
45
|
def run_standalone_ruby_files(list)
|
48
46
|
puts '*' * 40
|
49
47
|
list.each do |ruby_file|
|
50
|
-
system(
|
48
|
+
system(RbConfig.ruby, ruby_file)
|
51
49
|
p $?.exitstatus
|
52
50
|
break if $?.exitstatus != 0 && !opts[:continue]
|
53
51
|
end
|
@@ -58,7 +56,7 @@ def run_standalone_ruby_file(directory, opts={})
|
|
58
56
|
Dir.chdir(directory) do
|
59
57
|
Dir.glob('*.rb').each do |ruby_file|
|
60
58
|
puts(('-' * 20) + ' ' + ruby_file + ' ' + ('-' * 20))
|
61
|
-
system(
|
59
|
+
system(RbConfig.ruby, ruby_file)
|
62
60
|
break if $?.exitstatus != 0 && !opts[:continue]
|
63
61
|
end
|
64
62
|
end
|
@@ -170,7 +168,7 @@ end
|
|
170
168
|
|
171
169
|
task :check => %w(check:lib check:processor check:commands).map{|c| c.to_sym}
|
172
170
|
|
173
|
-
desc "
|
171
|
+
desc "Default action is same as 'test'."
|
174
172
|
task :default => :test
|
175
173
|
|
176
174
|
desc "Generate the gemspec"
|
data/app/cmd_parse.rb
CHANGED
data/app/core.rb
CHANGED
@@ -114,7 +114,7 @@ class Trepan
|
|
114
114
|
@hook_arg = arg
|
115
115
|
|
116
116
|
### debug:
|
117
|
-
### puts "#{frame.
|
117
|
+
### puts "#{frame.file[1]}:#{frame.source_location[0]}:in `#{frame.method}' #{event}" # if %w(line).member?(event)
|
118
118
|
@processor.process_commands(@frame)
|
119
119
|
|
120
120
|
# FIXME: There should be a Trace.event_mask which should return the first
|
data/app/frame.rb
CHANGED
@@ -16,6 +16,8 @@ class Trepan
|
|
16
16
|
|
17
17
|
include Trepan::Util
|
18
18
|
|
19
|
+
module_function
|
20
|
+
|
19
21
|
def all_param_names(iseq, delineate=true)
|
20
22
|
return '' unless iseq
|
21
23
|
params = param_names(iseq, 0, iseq.argc-1, '')
|
@@ -75,7 +77,10 @@ class Trepan
|
|
75
77
|
retval = $1 if retval =~ /^\(eval "(.+)"\)/
|
76
78
|
retval
|
77
79
|
end
|
78
|
-
|
80
|
+
|
81
|
+
def file
|
82
|
+
source_container[1]
|
83
|
+
end
|
79
84
|
|
80
85
|
def format_stack_call(frame, opts)
|
81
86
|
# FIXME: prettify
|
data/app/options.rb
CHANGED
data/app/run.rb
CHANGED
@@ -14,7 +14,7 @@ module Trepanning
|
|
14
14
|
# Make sure Ruby script syntax checks okay.
|
15
15
|
# Otherwise we get a load message that looks like trepanning has
|
16
16
|
# a problem.
|
17
|
-
output = `#{
|
17
|
+
output = `#{RbConfig.ruby} -c #{program_to_debug.inspect} 2>&1`
|
18
18
|
if $?.exitstatus != 0 and RUBY_PLATFORM !~ /mswin/
|
19
19
|
puts output
|
20
20
|
exit $?.exitstatus
|
@@ -49,11 +49,6 @@ module Trepanning
|
|
49
49
|
untrace_var(:$0, dollar_0_tracker)
|
50
50
|
end
|
51
51
|
|
52
|
-
# Path name of Ruby interpreter we were invoked with.
|
53
|
-
def ruby_path
|
54
|
-
File.join(%w(bindir RUBY_INSTALL_NAME).map{|k| RbConfig::CONFIG[k]})
|
55
|
-
end
|
56
|
-
|
57
52
|
# Do a shell-like path lookup for prog_script and return the results.
|
58
53
|
# If we can't find anything return prog_script.
|
59
54
|
def whence_file(prog_script)
|
@@ -75,5 +70,4 @@ if __FILE__ == $0
|
|
75
70
|
include Trepanning
|
76
71
|
puts whence_file('irb')
|
77
72
|
puts whence_file('probably-does-not-exist')
|
78
|
-
puts ruby_path
|
79
73
|
end
|
data/bin/trepan
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
|
3
3
|
# Invoke debugger from the command line.
|
4
|
+
require 'rbconfig' # For RbConfig.ruby
|
4
5
|
require_relative '../app/run'
|
5
6
|
require_relative '../app/options'
|
6
7
|
require_relative '../app/client'
|
@@ -33,7 +34,6 @@ if File.basename(__FILE__) == File.basename($0)
|
|
33
34
|
|
34
35
|
# FIXME: do we need to test defined?
|
35
36
|
# FIXME: Should (some of) these be instance variables?
|
36
|
-
Trepan::RUBY_PATH = ruby_path
|
37
37
|
Trepan::TREPAN_PATH = trepan_path
|
38
38
|
|
39
39
|
if ARGV.empty?
|
@@ -61,7 +61,7 @@ if File.basename(__FILE__) == File.basename($0)
|
|
61
61
|
|
62
62
|
# Set global so others may use this debugger.
|
63
63
|
$trepan = Trepan.new(opts)
|
64
|
-
debug_program($trepan,
|
64
|
+
debug_program($trepan, RbConfig.ruby,
|
65
65
|
File.expand_path(program_to_debug))
|
66
66
|
end
|
67
67
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Copyright (C) 2011 Rocky Bernstein <rockyb@rubyforge.net>
|
3
|
+
require_relative './base/cmd'
|
4
|
+
|
5
|
+
class Trepan::Command::EditCommand < Trepan::Command
|
6
|
+
|
7
|
+
old_verbose = $VERBOSE
|
8
|
+
$VERBOSE = nil
|
9
|
+
NAME = File.basename(__FILE__, '.rb')
|
10
|
+
HELP = <<-HELP
|
11
|
+
#{NAME} [LOCATION]
|
12
|
+
|
13
|
+
With no argument, edits file containing most recent line listed.
|
14
|
+
|
15
|
+
Editing targets can also be specified.
|
16
|
+
HELP
|
17
|
+
|
18
|
+
ALIASES = %w(e)
|
19
|
+
CATEGORY = 'files'
|
20
|
+
NEED_STACK = false
|
21
|
+
SHORT_HELP = 'Edit specified file or function'
|
22
|
+
$VERBOSE = old_verbose
|
23
|
+
|
24
|
+
def run(args)
|
25
|
+
if args.size == 1
|
26
|
+
|
27
|
+
unless true # @state.context
|
28
|
+
errmsg "We are not in a state that has an associated file.\n"
|
29
|
+
return
|
30
|
+
end
|
31
|
+
else
|
32
|
+
text = @proc.cmd_argstr
|
33
|
+
end
|
34
|
+
editor = ENV['EDITOR'] || '/bin/ex'
|
35
|
+
file = @proc.frame.file
|
36
|
+
if File.readable?(file)
|
37
|
+
edit_cmd = "#{editor} +#{@proc.frame.line} \"#{file}\""
|
38
|
+
msg "Running #{edit_cmd}..."
|
39
|
+
system(edit_cmd)
|
40
|
+
msg "Warning: return code was #{$?.exitstatus}" if $?.exitstatus != 0
|
41
|
+
else
|
42
|
+
errmsg "File \"#{file}\" is not readable.\n"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
if __FILE__ == $0
|
48
|
+
require_relative '../mock'
|
49
|
+
dbgr, cmd = MockDebugger::setup
|
50
|
+
dbgr, cmd = MockDebugger::setup
|
51
|
+
cmd.run [cmd.name] if ARGV.size > 0
|
52
|
+
end
|
data/processor/command/eval.rb
CHANGED
data/processor/validate.rb
CHANGED
@@ -281,7 +281,7 @@ class Trepan
|
|
281
281
|
get_method(meth)
|
282
282
|
end
|
283
283
|
|
284
|
-
# parse_position(self
|
284
|
+
# parse_position(self)->(meth, filename, offset, offset_type)
|
285
285
|
# See app/cmd_parser.kpeg for the syntax of a position which
|
286
286
|
# should include things like:
|
287
287
|
# Parse arg as [filename:]lineno | function | module
|
data/test/integration/helper.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'diff/lcs'
|
2
2
|
require 'fileutils'
|
3
|
-
require_relative '../../app/run' # for ruby_path
|
4
3
|
|
5
4
|
DEFAULT_DEBUGGER_OPTS = {
|
6
5
|
:args => '',
|
@@ -36,10 +35,10 @@ def run_debugger(testname, ruby_file, opts={})
|
|
36
35
|
cmd +=
|
37
36
|
if opts[:standalone]
|
38
37
|
"%s %s %s >%s 2>&1" %
|
39
|
-
[
|
38
|
+
[RbConfig.ruby, programfile, opts[:args], outfile]
|
40
39
|
else
|
41
40
|
"%s %s --nx --command %s %s '%s' %s >%s 2>&1" %
|
42
|
-
[
|
41
|
+
[RbConfig.ruby, dbgr_path, cmdfile, opts[:dbgr],
|
43
42
|
programfile, opts[:args], outfile]
|
44
43
|
end
|
45
44
|
puts cmd if opts[:verbose]
|
data/test/unit/test-app-run.rb
CHANGED
@@ -8,8 +8,6 @@ class TestAppRun < Test::Unit::TestCase
|
|
8
8
|
assert_equal(true, File.executable?(whence_file('irb')))
|
9
9
|
ng = whence_file('probably-does-not-exist')
|
10
10
|
assert_equal(true, File.executable?(ng) || ng == 'probably-does-not-exist')
|
11
|
-
rp = ruby_path
|
12
|
-
assert_equal(true, File.executable?(rp))
|
13
11
|
end
|
14
12
|
|
15
13
|
end
|
@@ -8,23 +8,6 @@ class TestBinTrepan < Test::Unit::TestCase
|
|
8
8
|
|
9
9
|
include Trepanning
|
10
10
|
|
11
|
-
def test_ruby_path
|
12
|
-
rb_path = ruby_path
|
13
|
-
assert_equal(true, File.executable?(rb_path),
|
14
|
-
"#{rb_path} should be an executable Ruby interpreter")
|
15
|
-
|
16
|
-
# Let us test that we get *exactly* the same configuration as we
|
17
|
-
# have in this. I'm a ball buster.
|
18
|
-
cmd = "#{rb_path} -rrbconfig -e 'puts Marshal.dump(RbConfig::CONFIG)'"
|
19
|
-
rb_config = Marshal.load(`#{cmd}`)
|
20
|
-
assert_equal(RbConfig::CONFIG, rb_config,
|
21
|
-
"#{rb_path} config doesn't match got:
|
22
|
-
#{rb_config.pretty_inspect}
|
23
|
-
expected:
|
24
|
-
#{RbConfig::CONFIG.pretty_inspect}
|
25
|
-
")
|
26
|
-
end
|
27
|
-
|
28
11
|
def test_whence_file
|
29
12
|
abs_path_me = File.expand_path(__FILE__)
|
30
13
|
assert_equal(abs_path_me, whence_file(abs_path_me),
|
data/trepanning.gemspec
CHANGED
@@ -18,9 +18,9 @@ This version works only with a patched version of Ruby 1.9.2 and rb-threadframe.
|
|
18
18
|
|
19
19
|
See also rbx-trepanning for a version that works with Rubinius.
|
20
20
|
EOF
|
21
|
-
spec.add_dependency('rb-threadframe', '
|
21
|
+
spec.add_dependency('rb-threadframe', '>= 0.38')
|
22
22
|
spec.add_dependency('rb-trace', '>= 0.4')
|
23
|
-
spec.add_dependency('linecache-tf', '
|
23
|
+
spec.add_dependency('linecache-tf', '>= 1.0')
|
24
24
|
spec.add_dependency('columnize')
|
25
25
|
spec.add_dependency('diff-lcs') # For testing only
|
26
26
|
spec.author = 'R. Bernstein'
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 2
|
9
|
+
version: 0.1.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- R. Bernstein
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-03-
|
17
|
+
date: 2011-03-28 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -23,7 +23,7 @@ dependencies:
|
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
24
|
none: false
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
segments:
|
29
29
|
- 0
|
@@ -51,13 +51,12 @@ dependencies:
|
|
51
51
|
requirement: &id003 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
|
-
- -
|
54
|
+
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
segments:
|
57
57
|
- 1
|
58
58
|
- 0
|
59
|
-
|
60
|
-
version: 1.0.dev
|
59
|
+
version: "1.0"
|
61
60
|
type: :runtime
|
62
61
|
version_requirements: *id003
|
63
62
|
- !ruby/object:Gem::Dependency
|
@@ -182,6 +181,7 @@ files:
|
|
182
181
|
- processor/command/disassemble.rb
|
183
182
|
- processor/command/display.rb
|
184
183
|
- processor/command/down.rb
|
184
|
+
- processor/command/edit.rb
|
185
185
|
- processor/command/enable.rb
|
186
186
|
- processor/command/eval.rb
|
187
187
|
- processor/command/exit.rb
|
@@ -424,7 +424,7 @@ rdoc_options:
|
|
424
424
|
- --main
|
425
425
|
- README
|
426
426
|
- --title
|
427
|
-
- Trepan 0.1.
|
427
|
+
- Trepan 0.1.2 Documentation
|
428
428
|
require_paths:
|
429
429
|
- lib
|
430
430
|
required_ruby_version: !ruby/object:Gem::Requirement
|