ruby-debug 0.9.3 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. data/AUTHORS +1 -0
  2. data/CHANGES +41 -0
  3. data/ChangeLog +0 -0
  4. data/README +27 -13
  5. data/Rakefile +220 -0
  6. data/bin/rdebug +116 -42
  7. data/cli/ruby-debug.rb +33 -3
  8. data/cli/ruby-debug/command.rb +49 -12
  9. data/cli/ruby-debug/commands/breakpoints.rb +47 -64
  10. data/cli/ruby-debug/commands/control.rb +41 -13
  11. data/cli/ruby-debug/commands/display.rb +35 -18
  12. data/cli/ruby-debug/commands/enable.rb +159 -0
  13. data/cli/ruby-debug/commands/eval.rb +78 -4
  14. data/cli/ruby-debug/commands/frame.rb +67 -42
  15. data/cli/ruby-debug/commands/help.rb +21 -17
  16. data/cli/ruby-debug/commands/info.rb +210 -0
  17. data/cli/ruby-debug/commands/irb.rb +9 -1
  18. data/cli/ruby-debug/commands/list.rb +11 -8
  19. data/cli/ruby-debug/commands/method.rb +12 -23
  20. data/cli/ruby-debug/commands/script.rb +14 -9
  21. data/cli/ruby-debug/commands/settings.rb +174 -39
  22. data/cli/ruby-debug/commands/show.rb +193 -0
  23. data/cli/ruby-debug/commands/stepping.rb +15 -10
  24. data/cli/ruby-debug/commands/threads.rb +55 -56
  25. data/cli/ruby-debug/commands/variables.rb +27 -27
  26. data/cli/ruby-debug/helper.rb +134 -0
  27. data/cli/ruby-debug/interface.rb +46 -15
  28. data/cli/ruby-debug/processor.rb +156 -25
  29. data/doc/rdebug.1 +236 -0
  30. data/runner.sh +7 -0
  31. data/test/breakpoints.cmd +43 -0
  32. data/test/breakpoints.right +94 -0
  33. data/test/display.cmd +18 -0
  34. data/test/display.right +37 -0
  35. data/test/frame.cmd +21 -0
  36. data/test/frame.right +45 -0
  37. data/test/gcd.rb +18 -0
  38. data/test/help.cmd +12 -0
  39. data/test/help.right +4 -0
  40. data/test/helper.rb +87 -0
  41. data/test/info-var-bug.rb +45 -0
  42. data/test/info-var.cmd +23 -0
  43. data/test/info-var.right +47 -0
  44. data/test/info.cmd +12 -0
  45. data/test/info.right +35 -0
  46. data/test/quit.cmd +9 -0
  47. data/test/quit.right +22 -0
  48. data/test/setshow.cmd +44 -0
  49. data/test/setshow.right +73 -0
  50. data/test/stepping.cmd +17 -0
  51. data/test/stepping.right +40 -0
  52. data/test/tdebug.rb +196 -0
  53. data/test/test-breakpoints.rb +28 -0
  54. data/test/test-columnize.rb +46 -0
  55. data/test/test-display.rb +26 -0
  56. data/test/test-frame.rb +27 -0
  57. data/test/test-help.rb +44 -0
  58. data/test/test-info-var.rb +33 -0
  59. data/test/test-info.rb +28 -0
  60. data/test/test-quit.rb +28 -0
  61. data/test/test-ruby-debug-base.rb +76 -0
  62. data/test/test-setshow.rb +24 -0
  63. data/test/test-stepping.rb +26 -0
  64. metadata +63 -22
data/test/frame.right ADDED
@@ -0,0 +1,45 @@
1
+ gcd.rb:4
2
+ def gcd(a, b)
3
+ # # ***************************************************
4
+ # # This tests step, next, finish and continue
5
+ # # ***************************************************
6
+ # set debuggertesting on
7
+ Currently testing the debugger is on.
8
+ # set callstyle last
9
+ Frame call-display style is last.
10
+ # continue 6
11
+ gcd.rb:6
12
+ if a > b
13
+ # where
14
+ --> #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
15
+ #1 at line gcd.rb:18
16
+ # up
17
+ #1 at line gcd.rb:18
18
+ # where
19
+ #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
20
+ --> #1 at line gcd.rb:18
21
+ # down
22
+ #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
23
+ # where
24
+ --> #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
25
+ #1 at line gcd.rb:18
26
+ # frame 0
27
+ #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
28
+ # where
29
+ --> #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
30
+ #1 at line gcd.rb:18
31
+ # frame -1
32
+ #1 at line gcd.rb:18
33
+ # where
34
+ #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
35
+ --> #1 at line gcd.rb:18
36
+ # up 2
37
+ Adjusting would put us beyond the oldest (initial) frame.# where
38
+ #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
39
+ --> #1 at line gcd.rb:18
40
+ # down 2
41
+ Adjusting would put us beyond the newest (innermost) frame.# where
42
+ #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
43
+ --> #1 at line gcd.rb:18
44
+ # # finish
45
+ # quit
data/test/gcd.rb ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # GCD. We assume positive numbers
4
+ def gcd(a, b)
5
+ # Make: a <= b
6
+ if a > b
7
+ a, b = [b, a]
8
+ end
9
+
10
+ return nil if a <= 0
11
+
12
+ if a == 1 or b-a == 0
13
+ return a
14
+ end
15
+ return gcd(b-a, a)
16
+ end
17
+
18
+ gcd(3,5)
data/test/help.cmd ADDED
@@ -0,0 +1,12 @@
1
+ # $Id: setshow.cmd 298 2007-08-28 10:07:35Z rockyb $
2
+ # This tests the functioning of some set/show debugger commands
3
+ set debuggertesting on
4
+ set autoeval off
5
+ set width 80
6
+ ### *******************************
7
+ ### *** help commands ***
8
+ ### *******************************
9
+ help foo
10
+ # FIXME - the below should work
11
+ # help
12
+ # help step
data/test/help.right ADDED
@@ -0,0 +1,4 @@
1
+ Currently testing the debugger is on.
2
+ autoeval is off.
3
+ width is 80.
4
+ Undefined command: "foo". Try "help".
data/test/helper.rb ADDED
@@ -0,0 +1,87 @@
1
+ # Some common routines used in testing.
2
+
3
+ require "fileutils"
4
+ # require "diff/lcs"
5
+ # require "diff/lcs/hunk"
6
+
7
+ module TestHelper
8
+
9
+ def run_debugger(testname, args='', outfile=nil, filter=nil)
10
+ rightfile = File.join(SRC_DIR, "#{testname}.right")
11
+
12
+ outfile = File.join(SRC_DIR, "#{testname}.out") unless outfile
13
+
14
+ if File.exists?(outfile)
15
+ FileUtils.rm(outfile)
16
+ end
17
+
18
+ ENV['RDEBUG'] = "#{SRC_DIR}tdebug.rb"
19
+ cmd = "/bin/sh #{File.join(SRC_DIR, '../runner.sh')} #{args} >#{outfile}"
20
+ output = `#{cmd}`
21
+
22
+ got_lines = File.read(outfile).split(/\n/)
23
+ correct_lines = File.read(rightfile).split(/\n/)
24
+ filter.call(got_lines, correct_lines) if filter
25
+ if cheap_diff(got_lines, correct_lines)
26
+ FileUtils.rm(outfile)
27
+ return true
28
+ end
29
+ return false
30
+ end
31
+
32
+ def cheap_diff(got_lines, correct_lines)
33
+ puts got_lines if $DEBUG
34
+ correct_lines.each_with_index do |line, i|
35
+ correct_lines[i].chomp!
36
+ if got_lines[i] != correct_lines[i]
37
+ puts "difference found at line #{i+1}"
38
+ puts "got : #{got_lines[i]}"
39
+ puts "need: #{correct_lines[i]}"
40
+ return false
41
+ end
42
+ end
43
+ if correct_lines.size != got_lines.size
44
+ puts("difference in number of lines: " +
45
+ "#{correct_lines.size} vs. #{got_lines.size}")
46
+ return false
47
+ end
48
+ return true
49
+ end
50
+
51
+
52
+ # Adapted from the Ruby Cookbook, Section 6.10: Comparing two files.
53
+ # def diff_as_string(rightfile, checkfile, format=:unified, context_lines=3)
54
+ # right_data = File.read(rightfile)
55
+ # check_data = File.read(checkfile)
56
+ # output = ""
57
+ # diffs = Diff::LCS.diff(right_data, check_data)
58
+ # return output if diffs.empty?
59
+ # oldhunk = hunk = nil
60
+ # debugger
61
+ # file_length_difference = 0
62
+ # diffs.each do |piece|
63
+ # begin
64
+ # hunk = Diff::LCS::Hunk.new(right_data, check_data, piece,
65
+ # context_lines, file_length_difference)
66
+ # next unless oldhunk
67
+ #
68
+ # # Hunks may overlap, which is why we need to be careful when our
69
+ # # diff includes lines of context. Otherwise, we might print
70
+ # # redundant lines.
71
+ # if (context_lines > 0) and hunk.overlaps?(oldhunk)
72
+ # hunk.unshift(oldhunk)
73
+ # else
74
+ # output << oldhunk.diff(format)
75
+ # end
76
+ # ensure
77
+ # oldhunk = hunk
78
+ # output << "\n"
79
+ # end
80
+ # end
81
+
82
+ # # Handle the last remaining hunk
83
+ # output << oldhunk.diff(format) << "\n"
84
+ # end
85
+
86
+ end
87
+
@@ -0,0 +1,45 @@
1
+ class Lousy_inspect
2
+ attr_accessor :var
3
+ def inspect # An unhelpful inspect
4
+ throw "Foo" # Raises an exception
5
+ end
6
+ def initialize
7
+ @var = 'initialized'
8
+ end
9
+ end
10
+ class Lousy_inspect_and_to_s
11
+ attr_accessor :var
12
+ def inspect # An unhelpful inspect
13
+ throw "Foo" # Raises an exception
14
+ end
15
+ def to_s # An unhelpful to_s
16
+ throw "bar" # Raises an exception
17
+ end
18
+ def initialize
19
+ @var = 'initialized' # Something to inspect
20
+ end
21
+ end
22
+
23
+ # Something that will be passed objects with
24
+ # bad inspect or to_s methods
25
+ class UnsuspectingClass
26
+ def initialize(a)
27
+ @a = a # "info locals" will try to use
28
+ # inspect or to_s here
29
+ @b = 5
30
+ end
31
+ end
32
+ def test_Lousy_inspect
33
+ x = Lousy_inspect.new
34
+ return x
35
+ end
36
+ def test_lousy_inspect_and_to_s
37
+ x = Lousy_inspect_and_to_s.new
38
+ return x
39
+ end
40
+ x = test_Lousy_inspect
41
+ y = test_lousy_inspect_and_to_s
42
+ UnsuspectingClass.new(10)
43
+ UnsuspectingClass.new(x)
44
+ UnsuspectingClass.new(y)
45
+ y = 2
data/test/info-var.cmd ADDED
@@ -0,0 +1,23 @@
1
+ # ***************************************************
2
+ # Test handling of info variables when we have
3
+ # redefined inspect or to_s which give an error.
4
+ # ***************************************************
5
+ set debuggertesting on
6
+ # Go to where we have a bad "inspect" of a local variable
7
+ continue 34
8
+ info variables
9
+ # Go to where we have a bad "inspect" and "to_s" of a local variable
10
+ continue 38
11
+ info variables
12
+ break 29
13
+ # The first time through, we can do inspect.
14
+ continue
15
+ info locals
16
+ # Now go to where we have a bad "inspect" of an class variable
17
+ continue
18
+ info locals
19
+ info variables
20
+ # Now go to where we have a bad "inspect" and "to_s" of an class variable
21
+ continue
22
+ info locals
23
+ quit
@@ -0,0 +1,47 @@
1
+ info-var-bug.rb:1
2
+ class Lousy_inspect
3
+ # # ***************************************************
4
+ # # Test handling of info variables when we have
5
+ # # redefined inspect or to_s which give an error.
6
+ # # ***************************************************
7
+ # set debuggertesting on
8
+ Currently testing the debugger is on.
9
+ # # Go to where we have a bad "inspect" of a local variable
10
+ # continue 34
11
+ info-var-bug.rb:34
12
+ return x
13
+ # info variables
14
+ x = #<Lousy_inspect:0xb784945c>
15
+ # # Go to where we have a bad "inspect" and "to_s" of a local variable
16
+ # continue 38
17
+ info-var-bug.rb:38
18
+ return x
19
+ # info variables
20
+ x = *Error in evaluation*
21
+ # break 29
22
+ Breakpoint 1 file info-var-bug.rb, line 29
23
+ # # The first time through, we can do inspect.
24
+ # continue
25
+ Breakpoint 1 at info-var-bug.rb:29
26
+ info-var-bug.rb:29
27
+ @b = 5
28
+ # info locals
29
+ a = 10
30
+ # # Now go to where we have a bad "inspect" of an class variable
31
+ # continue
32
+ Breakpoint 1 at info-var-bug.rb:29
33
+ info-var-bug.rb:29
34
+ @b = 5
35
+ # info locals
36
+ a = #<Lousy_inspect:0xb784945c>
37
+ # info variables
38
+ a = #<Lousy_inspect:0xb784945c>
39
+ @a = #<Lousy_inspect:0xb784945c>
40
+ # # Now go to where we have a bad "inspect" and "to_s" of an class variable
41
+ # continue
42
+ Breakpoint 1 at info-var-bug.rb:29
43
+ info-var-bug.rb:29
44
+ @b = 5
45
+ # info locals
46
+ *Error in evaluation*
47
+ # quit
data/test/info.cmd ADDED
@@ -0,0 +1,12 @@
1
+ # ***************************************************
2
+ # This tests step, next, finish and continue
3
+ # ***************************************************
4
+ set debuggertesting on
5
+ set callstyle last
6
+ help info
7
+ info args
8
+ info line
9
+ info locals
10
+ info stack
11
+ info display
12
+ quit
data/test/info.right ADDED
@@ -0,0 +1,35 @@
1
+ gcd.rb:4
2
+ def gcd(a, b)
3
+ # # ***************************************************
4
+ # # This tests step, next, finish and continue
5
+ # # ***************************************************
6
+ # set debuggertesting on
7
+ Currently testing the debugger is on.
8
+ # set callstyle last
9
+ Frame call-display style is last.
10
+ # help info
11
+ Generic command for showing things about the program being debugged.
12
+ --
13
+ List of info subcommands:
14
+ --
15
+ info args -- Argument variables of current stack frame
16
+ info breakpoints -- Status of user-settable breakpoints
17
+ info display -- Expressions to display when program stops
18
+ info file -- File names and timestamps of files read in
19
+ info global_variables -- global variables
20
+ info instance_variables -- instance variables
21
+ info line -- Line number and file name of current position in source
22
+ info locals -- Local variables of the current stack frame
23
+ info program -- Execution status of the program
24
+ info stack -- Backtrace of the stack
25
+ info threads -- IDs of currently known threads
26
+ info variables -- local and instance variables
27
+ # info args
28
+ # info line
29
+ Line 4 of "./gcd.rb"
30
+ # info locals
31
+ # info stack
32
+ --> #0 at line gcd.rb:4
33
+ # info display
34
+ There are no auto-display expressions now.
35
+ # quit
data/test/quit.cmd ADDED
@@ -0,0 +1,9 @@
1
+ # ***************************************************
2
+ # This tests display expressions.
3
+ # ***************************************************
4
+ set debuggertesting on
5
+ c
6
+ break 18
7
+ c
8
+ next
9
+ quit
data/test/quit.right ADDED
@@ -0,0 +1,22 @@
1
+ gcd.rb:4
2
+ def gcd(a, b)
3
+ # # ***************************************************
4
+ # # This tests display expressions.
5
+ # # ***************************************************
6
+ # set debuggertesting on
7
+ Currently testing the debugger is on.
8
+ # c
9
+ The program has finished and will be restarted.
10
+ gcd.rb:4
11
+ def gcd(a, b)
12
+ # break 18
13
+ Breakpoint 1 file gcd.rb, line 18
14
+ # c
15
+ Breakpoint 1 at gcd.rb:18
16
+ gcd.rb:18
17
+ gcd(3,5)
18
+ # next
19
+ The program has finished and will be restarted.
20
+ gcd.rb:4
21
+ def gcd(a, b)
22
+ # quit
data/test/setshow.cmd ADDED
@@ -0,0 +1,44 @@
1
+ # $Id: setshow.cmd 346 2007-11-14 01:39:05Z rockyb $
2
+ # This tests the functioning of some set/show debugger commands
3
+ set debuggertesting on
4
+ ### *******************************
5
+ ### *** Set/show commands ***
6
+ ### *******************************
7
+ ########################################
8
+ ### test args and baseneme...
9
+ ########################################
10
+ set args this is a test
11
+ show args
12
+ show basename
13
+ set basename foo
14
+ show base
15
+ set basename off
16
+ show basename
17
+ set basename 0
18
+ show basename
19
+ set basename 1
20
+ show basename
21
+ ########################################
22
+ ### test listsize tests...
23
+ ########################################
24
+ show listsize
25
+ show listsi
26
+ set listsize abc
27
+ set listsize -20
28
+ ########################################
29
+ ### test linetrace...
30
+ ########################################
31
+ set linetrace on
32
+ show linetrace
33
+ set linetrace off
34
+ show linetrace
35
+ ########################################
36
+ ### show history
37
+ ########################################
38
+ set history
39
+ set history size 10
40
+ show history size
41
+ set history save off
42
+ show history save
43
+ set history save 1
44
+ show history save
@@ -0,0 +1,73 @@
1
+ gcd.rb:4
2
+ def gcd(a, b)
3
+ # # $Id: setshow.cmd 346 2007-11-14 01:39:05Z rockyb $
4
+ # # This tests the functioning of some set/show debugger commands
5
+ # set debuggertesting on
6
+ Currently testing the debugger is on.
7
+ # ### *******************************
8
+ # ### *** Set/show commands ***
9
+ # ### *******************************
10
+ # ########################################
11
+ # ### test args and baseneme...
12
+ # ########################################
13
+ # set args this is a test
14
+ Argument list to give program being debugged when it is started is "this is a test".
15
+ # show args
16
+ Argument list to give program being debugged when it is started is "this is a test".
17
+ # show basename
18
+ basename is on.
19
+ # set basename foo
20
+ Expecting 'on', 1, 'off', or 0. Got: foo.
21
+ # show base
22
+ basename is on.
23
+ # set basename off
24
+ basename is off.
25
+ # show basename
26
+ basename is off.
27
+ # set basename 0
28
+ basename is off.
29
+ # show basename
30
+ basename is off.
31
+ # set basename 1
32
+ basename is on.
33
+ # show basename
34
+ basename is on.
35
+ # ########################################
36
+ # ### test listsize tests...
37
+ # ########################################
38
+ # show listsize
39
+ Number of source lines to list by default is 10.
40
+ # show listsi
41
+ Number of source lines to list by default is 10.
42
+ # set listsize abc
43
+ Set listsize argument 'abc' needs to be a number.
44
+ # set listsize -20
45
+ Set listsize argument '-20' needs to at least 1.
46
+ # ########################################
47
+ # ### test linetrace...
48
+ # ########################################
49
+ # set linetrace on
50
+ line tracing is on.
51
+ # show linetrace
52
+ line tracing is on.
53
+ # set linetrace off
54
+ line tracing is off.
55
+ # show linetrace
56
+ line tracing is off.
57
+ # ########################################
58
+ # ### show history
59
+ # ########################################
60
+ # set history
61
+ Need two parameters for 'set history'; got 0.
62
+ # set history size 10
63
+ Debugger history size is 10
64
+ # show history size
65
+ Debugger history size is 10
66
+ # set history save off
67
+ Saving of history save is off.
68
+ # show history save
69
+ Saving of history save is off.
70
+ # set history save 1
71
+ Saving of history save is on.
72
+ # show history save
73
+ Saving of history save is on.