ruby-debug 0.10.0 → 0.10.1

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 (152) hide show
  1. data/CHANGES +94 -2
  2. data/ChangeLog +5225 -0
  3. data/README +30 -1
  4. data/Rakefile +55 -24
  5. data/bin/rdebug +249 -128
  6. data/cli/ruby-debug/command.rb +30 -3
  7. data/cli/ruby-debug/commands/breakpoints.rb +54 -24
  8. data/cli/ruby-debug/commands/catchpoint.rb +13 -12
  9. data/cli/ruby-debug/commands/condition.rb +49 -0
  10. data/cli/ruby-debug/commands/continue.rb +32 -0
  11. data/cli/ruby-debug/commands/control.rb +19 -43
  12. data/cli/ruby-debug/commands/disassemble.RB +38 -0
  13. data/cli/ruby-debug/commands/display.rb +1 -1
  14. data/cli/ruby-debug/commands/edit.rb +48 -0
  15. data/cli/ruby-debug/commands/enable.rb +78 -35
  16. data/cli/ruby-debug/commands/eval.rb +6 -5
  17. data/cli/ruby-debug/commands/finish.rb +42 -0
  18. data/cli/ruby-debug/commands/frame.rb +64 -33
  19. data/cli/ruby-debug/commands/help.rb +19 -15
  20. data/cli/ruby-debug/commands/info.rb +295 -36
  21. data/cli/ruby-debug/commands/irb.rb +3 -1
  22. data/cli/ruby-debug/commands/list.rb +27 -50
  23. data/cli/ruby-debug/commands/quit.rb +38 -0
  24. data/cli/ruby-debug/commands/reload.rb +40 -0
  25. data/cli/ruby-debug/commands/save.rb +80 -0
  26. data/cli/ruby-debug/commands/{settings.rb → set.rb} +50 -12
  27. data/cli/ruby-debug/commands/show.rb +83 -27
  28. data/cli/ruby-debug/commands/source.rb +36 -0
  29. data/cli/ruby-debug/commands/stepping.rb +36 -72
  30. data/cli/ruby-debug/commands/threads.rb +32 -23
  31. data/cli/ruby-debug/commands/variables.rb +34 -4
  32. data/cli/ruby-debug/helper.rb +10 -75
  33. data/cli/ruby-debug/interface.rb +72 -9
  34. data/cli/ruby-debug/processor.rb +203 -100
  35. data/doc/rdebug.1 +7 -2
  36. data/rdbg.rb +33 -0
  37. data/test/{test-ruby-debug-base.rb → base/base.rb} +27 -29
  38. data/test/base/binding.rb +31 -0
  39. data/test/base/catchpoint.rb +26 -0
  40. data/test/base/load.rb +40 -0
  41. data/test/data/annotate.cmd +29 -0
  42. data/test/data/annotate.right +137 -0
  43. data/test/data/break_bad.cmd +18 -0
  44. data/test/data/break_bad.right +28 -0
  45. data/test/data/breakpoints.cmd +38 -0
  46. data/test/data/breakpoints.right +98 -0
  47. data/test/data/condition.cmd +28 -0
  48. data/test/data/condition.right +65 -0
  49. data/test/data/ctrl.cmd +23 -0
  50. data/test/data/ctrl.right +69 -0
  51. data/test/{display.cmd → data/display.cmd} +7 -1
  52. data/test/{display.right → data/display.right} +13 -6
  53. data/test/data/dollar-0.right +2 -0
  54. data/test/data/dollar-0a.right +2 -0
  55. data/test/data/dollar-0b.right +2 -0
  56. data/test/data/edit.cmd +12 -0
  57. data/test/data/edit.right +19 -0
  58. data/test/{breakpoints.cmd → data/emacs_basic.cmd} +0 -0
  59. data/test/{breakpoints.right → data/emacs_basic.right} +24 -12
  60. data/test/data/enable.cmd +20 -0
  61. data/test/data/enable.right +36 -0
  62. data/test/data/finish.cmd +16 -0
  63. data/test/data/finish.right +43 -0
  64. data/test/{frame.cmd → data/frame.cmd} +2 -0
  65. data/test/{frame.right → data/frame.right} +8 -2
  66. data/test/{help.cmd → data/help.cmd} +8 -0
  67. data/test/data/help.right +21 -0
  68. data/test/data/history.right +7 -0
  69. data/test/data/info-thread.cmd +13 -0
  70. data/test/data/info-thread.right +37 -0
  71. data/test/data/info-var-bug2.cmd +5 -0
  72. data/test/data/info-var-bug2.right +10 -0
  73. data/test/{info-var.cmd → data/info-var.cmd} +3 -3
  74. data/test/{info-var.right → data/info-var.right} +20 -15
  75. data/test/{info.cmd → data/info.cmd} +10 -1
  76. data/test/data/info.right +65 -0
  77. data/test/data/linetrace.cmd +6 -0
  78. data/test/data/linetrace.right +32 -0
  79. data/test/data/linetracep.cmd +7 -0
  80. data/test/data/linetracep.right +25 -0
  81. data/test/data/list.cmd +19 -0
  82. data/test/data/list.right +127 -0
  83. data/test/data/noquit.right +1 -0
  84. data/test/data/output.cmd +6 -0
  85. data/test/data/output.right +41 -0
  86. data/test/data/post-mortem-next.cmd +8 -0
  87. data/test/data/post-mortem-next.right +14 -0
  88. data/test/data/post-mortem-osx.right +31 -0
  89. data/test/data/post-mortem.cmd +13 -0
  90. data/test/data/post-mortem.right +31 -0
  91. data/test/{quit.cmd → data/quit.cmd} +2 -5
  92. data/test/data/quit.right +9 -0
  93. data/test/data/raise.cmd +11 -0
  94. data/test/data/raise.right +26 -0
  95. data/test/{setshow.cmd → data/setshow.cmd} +0 -1
  96. data/test/{setshow.right → data/setshow.right} +0 -1
  97. data/test/data/source.cmd +5 -0
  98. data/test/data/source.right +15 -0
  99. data/test/{stepping.cmd → data/stepping.cmd} +6 -2
  100. data/test/{stepping.right → data/stepping.right} +13 -3
  101. data/test/data/test-init-cygwin.right +7 -0
  102. data/test/data/test-init-osx.right +4 -0
  103. data/test/data/test-init.right +5 -0
  104. data/test/data/trace.right +23 -0
  105. data/test/dollar-0.rb +5 -0
  106. data/test/except-bug2.rb +7 -0
  107. data/test/gcd-dbg-nox.rb +31 -0
  108. data/test/gcd-dbg.rb +30 -0
  109. data/test/helper.rb +44 -14
  110. data/test/info-var-bug.rb +2 -0
  111. data/test/info-var-bug2.rb +2 -0
  112. data/test/null.rb +1 -0
  113. data/test/output.rb +2 -0
  114. data/test/pm-base.rb +22 -0
  115. data/test/pm.rb +11 -0
  116. data/test/raise.rb +3 -0
  117. data/test/tdebug.rb +88 -40
  118. data/test/test-annotate.rb +25 -0
  119. data/test/test-break-bad.rb +25 -0
  120. data/test/test-breakpoints.rb +14 -17
  121. data/test/test-condition.rb +25 -0
  122. data/test/test-ctrl.rb +54 -0
  123. data/test/test-display.rb +15 -15
  124. data/test/test-dollar-0.rb +39 -0
  125. data/test/test-edit.rb +26 -0
  126. data/test/test-emacs-basic.rb +26 -0
  127. data/test/test-enable.rb +25 -0
  128. data/test/test-finish.rb +34 -0
  129. data/test/test-frame.rb +15 -16
  130. data/test/test-help.rb +34 -18
  131. data/test/test-hist.rb +68 -0
  132. data/test/test-info-thread.rb +32 -0
  133. data/test/test-info-var.rb +28 -14
  134. data/test/test-info.rb +15 -17
  135. data/test/test-init.rb +41 -0
  136. data/test/test-list.rb +25 -0
  137. data/test/test-output.rb +26 -0
  138. data/test/test-pm.rb +46 -0
  139. data/test/test-quit.rb +19 -17
  140. data/test/test-raise.rb +25 -0
  141. data/test/test-setshow.rb +14 -13
  142. data/test/test-source.rb +25 -0
  143. data/test/test-stepping.rb +14 -14
  144. data/test/test-trace.rb +63 -0
  145. data/test/thread1.rb +26 -0
  146. metadata +125 -31
  147. data/cli/ruby-debug/commands/script.rb +0 -64
  148. data/runner.sh +0 -7
  149. data/test/help.right +0 -4
  150. data/test/info.right +0 -35
  151. data/test/quit.right +0 -22
  152. data/test/test-columnize.rb +0 -46
data/doc/rdebug.1 CHANGED
@@ -1,4 +1,4 @@
1
- .\" $Id: rdebug.1 461 2007-12-22 11:18:14Z rockyb $
1
+ .\" $Id: rdebug.1 516 2007-12-31 05:55:24Z rockyb $
2
2
  .TH rdebug 1
3
3
  .SH NAME
4
4
  rdebug \- Fast Ruby debugger
@@ -165,6 +165,11 @@ Port used for control commands.
165
165
  Set $DEBUG true.
166
166
  .TP
167
167
  .B \-\-emacs
168
+ Activates full GNU Emacs mode. Is the equivalent of setting the
169
+ options \-\-emacs\-basic, \-\-annotate=3, \-\-no-stop, \-\-no\-control
170
+ and \-\-post\-mortem.
171
+ .TP
172
+ .B \-\-emacs-basic
168
173
  Activates GNU Emacs mode. Debugger prompts are prefaced with two octal
169
174
  032 characters.
170
175
  .TP
@@ -180,7 +185,7 @@ Activate post-mortem mode.
180
185
  .B \-\-no-control
181
186
  Do not automatically start control thread.
182
187
  .TP
183
- .B \-n | \-\-no\-stop
188
+ .B \-\-no\-stop
184
189
  Do not stop when script is loaded.
185
190
  .TP
186
191
  .B \-p | \-\-port=PORT
data/rdbg.rb ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+ #!/usr/bin/env ruby
3
+ # $Id: rdbg.rb 756 2008-03-13 02:15:04Z rockyb $
4
+
5
+ # Use this to run rdebug without installing it. We assume that the
6
+ # library directories are stored at the same level the directory
7
+ # this program.
8
+ module RDebugRunner
9
+ def runner(stdout=nil)
10
+
11
+ # Add libraries to load path.
12
+ dirname=File.dirname(__FILE__)
13
+ libs = %w(ext lib cli)
14
+ libs.each { |lib| $:.unshift File.join(dirname, lib) }
15
+
16
+ rdebug=ENV['RDEBUG'] || File.join(dirname, 'bin', 'rdebug')
17
+ if stdout
18
+ old_stdout = $stdout
19
+ $stdout.reopen(stdout)
20
+ else
21
+ old_stdout = nil
22
+ end
23
+ load(rdebug, true)
24
+ $stdout.reopen(old_stdout) if old_stdout
25
+
26
+ # Remove those libraries we just added.
27
+ 1.upto(libs.size) {$:.shift}
28
+ end
29
+ module_function :runner
30
+ end
31
+ if __FILE__ == $0
32
+ RDebugRunner.runner
33
+ end
@@ -1,75 +1,73 @@
1
1
  #!/usr/bin/env ruby
2
- require "test/unit"
2
+ require 'test/unit'
3
3
 
4
- $: << File.expand_path(File.dirname(__FILE__)) + '/../ext'
5
- $: << File.expand_path(File.dirname(__FILE__)) + '/../lib'
6
- require "ruby_debug"
7
-
8
- # Test of C extension ruby_debug.so
4
+ # Some tests of Debugger module in C extension ruby_debug
9
5
  class TestRubyDebug < Test::Unit::TestCase
10
- include Debugger
6
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'ext')
7
+ require 'ruby_debug'
8
+ $:.shift
11
9
 
12
10
  # test current_context
13
11
  def test_current_context
14
12
  assert_equal(false, Debugger.started?,
15
- "debugger should not initially be started.")
16
- Debugger.start
13
+ 'debugger should not initially be started.')
14
+ Debugger.start_
17
15
  assert(Debugger.started?,
18
- "debugger should now be started.")
19
- assert_equal(19, Debugger.current_context.frame_line)
16
+ 'debugger should now be started.')
17
+ assert_equal(__LINE__, Debugger.current_context.frame_line)
20
18
  assert_equal(nil, Debugger.current_context.frame_args_info,
21
- "no frame args info.")
19
+ 'no frame args info.')
22
20
  assert_equal(Debugger.current_context.frame_file,
23
21
  Debugger.current_context.frame_file(0))
24
- assert_equal("test-ruby-debug-base.rb",
22
+ assert_equal(File.basename(__FILE__),
25
23
  File.basename(Debugger.current_context.frame_file))
26
24
  assert_raises(ArgumentError) {Debugger.current_context.frame_file(1, 2)}
27
25
  assert_raises(ArgumentError) {Debugger.current_context.frame_file(10)}
28
26
  assert_equal(1, Debugger.current_context.stack_size)
29
27
  assert_equal(TestRubyDebug, Debugger.current_context.frame_class)
30
- assert_equal(false, Debugger.current_context.dead?, "Not dead yet!")
28
+ assert_equal(false, Debugger.current_context.dead?, 'Not dead yet!')
31
29
  Debugger.stop
32
30
  assert_equal(false, Debugger.started?,
33
- "Debugger should no longer be started.")
31
+ 'Debugger should no longer be started.')
34
32
  end
35
33
 
36
34
  # Test initial variables and setting/getting state.
37
35
  def test_debugger_base
38
36
  assert_equal(false, Debugger.started?,
39
- "Debugger should not initially be started.")
40
- Debugger.start
37
+ 'Debugger should not initially be started.')
38
+ Debugger.start_
41
39
  assert(Debugger.started?,
42
- "Debugger should now be started.")
40
+ 'Debugger should now be started.')
43
41
  assert_equal(false, Debugger.debug,
44
- "Debug variable should not be set.")
42
+ 'Debug variable should not be set.')
45
43
  assert_equal(false, Debugger.post_mortem?,
46
- "Post mortem debugging should not be set.")
44
+ 'Post mortem debugging should not be set.')
47
45
  a = Debugger.contexts
48
46
  assert_equal(1, a.size,
49
- "There should only be one context.")
47
+ 'There should only be one context.')
50
48
  assert_equal(Array, a.class,
51
- "Context should be an array.")
49
+ 'Context should be an array.')
52
50
  Debugger.stop
53
51
  assert_equal(false, Debugger.started?,
54
- "debugger should no longer be started.")
52
+ 'debugger should no longer be started.')
55
53
  end
56
54
 
57
55
  # Test breakpoint handling
58
56
  def test_breakpoints
59
- Debugger.start
57
+ Debugger.start_
60
58
  assert_equal(0, Debugger.breakpoints.size,
61
- "There should not be any breakpoints set.")
59
+ 'There should not be any breakpoints set.')
62
60
  brk = Debugger.add_breakpoint(__FILE__, 1)
63
61
  assert_equal(Debugger::Breakpoint, brk.class,
64
- "Breakpoint should have been set and returned.")
62
+ 'Breakpoint should have been set and returned.')
65
63
  assert_equal(1, Debugger.breakpoints.size,
66
- "There should now be one breakpoint set.")
64
+ 'There should now be one breakpoint set.')
67
65
  Debugger.remove_breakpoint(0)
68
66
  assert_equal(1, Debugger.breakpoints.size,
69
- "There should still be one breakpoint set.")
67
+ 'There should still be one breakpoint set.')
70
68
  Debugger.remove_breakpoint(1)
71
69
  assert_equal(0, Debugger.breakpoints.size,
72
- "There should no longer be any breakpoints set.")
70
+ 'There should no longer be any breakpoints set.')
73
71
  Debugger.stop
74
72
  end
75
73
  end
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+
5
+ # Test binding_n command
6
+ class TestBinding < Test::Unit::TestCase
7
+
8
+ SRC_DIR = File.expand_path(File.dirname(__FILE__)) unless
9
+ defined?(SRC_DIR)
10
+ %w(ext lib).each do |dir|
11
+ $:.unshift File.join(SRC_DIR, '..', '..', dir)
12
+ end
13
+ require File.join(SRC_DIR, '..', '..', 'lib', 'ruby-debug-base')
14
+ $:.shift; $:.shift
15
+
16
+ def test_basic
17
+ def inside_fn
18
+ s = 'some other string'
19
+ b2 = Kernel::binding_n(1)
20
+ y2 = eval('s', b2)
21
+ assert_equal('this is a test', y2)
22
+ end
23
+ s = 'this is a test'
24
+ Debugger.start
25
+ b = Kernel::binding_n(0)
26
+ y = eval('s', b)
27
+ assert_equal(y, s)
28
+ inside_fn
29
+ Debugger.stop
30
+ end
31
+ end
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ require 'test/unit'
3
+
4
+ # Test catchpoint in C ruby_debug extension.
5
+
6
+ class TestRubyDebugCatchpoint < Test::Unit::TestCase
7
+
8
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'ext')
9
+ require 'ruby_debug'
10
+ $:.shift
11
+
12
+ # test current_context
13
+ def test_catchpoints
14
+ assert_raise(RuntimeError) {Debugger.catchpoints}
15
+ Debugger.start_
16
+ assert_equal({}, Debugger.catchpoints)
17
+ Debugger.add_catchpoint('ZeroDivisionError')
18
+ assert_equal({'ZeroDivisionError' => 0}, Debugger.catchpoints)
19
+ Debugger.add_catchpoint('RuntimeError')
20
+ assert_equal(['RuntimeError', 'ZeroDivisionError'],
21
+ Debugger.catchpoints.keys.sort)
22
+ Debugger.stop
23
+ end
24
+
25
+ end
26
+
data/test/base/load.rb ADDED
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+ require 'test/unit'
3
+
4
+ # Test of Debugger.debug_load in C extension ruby_debug.so
5
+ class TestDebugLoad < Test::Unit::TestCase
6
+
7
+ @@src_dir = File.dirname(__FILE__)
8
+ $:.unshift File.join(@@src_dir, '..', '..', 'ext')
9
+ require 'ruby_debug'
10
+ $:.shift
11
+
12
+ class << self
13
+ def at_line(file, line)
14
+ @@at_line = [File.basename(file), line]
15
+ end
16
+ end
17
+
18
+ Debugger::PROG_SCRIPT = File.join(@@src_dir, '..', 'gcd.rb')
19
+
20
+ class Debugger::Context
21
+ def at_line(file, line)
22
+ TestDebugLoad::at_line(file, line)
23
+ end
24
+ end
25
+
26
+ def test_debug_load
27
+ # Without stopping
28
+ bt = Debugger.debug_load(Debugger::PROG_SCRIPT, false)
29
+ assert_equal(nil, bt)
30
+ # With stopping
31
+ bt = Debugger.debug_load(Debugger::PROG_SCRIPT, true)
32
+ assert_equal(nil, bt)
33
+ assert_equal(['gcd.rb', 4], @@at_line)
34
+
35
+ # Test that we get a proper backtrace on a script that raises 'abc'
36
+ prog_script = File.join(@@src_dir, '..', 'raise.rb')
37
+ bt = Debugger.debug_load(prog_script, false)
38
+ assert_equal(bt.to_s, 'abc')
39
+ end
40
+ end
@@ -0,0 +1,29 @@
1
+ # ********************************************************
2
+ # This tests annotations
3
+ # ********************************************************
4
+ set debuggertesting on
5
+ set callstyle last
6
+ set force off
7
+ set annotate 3
8
+ # Get into gcd
9
+ step 2
10
+ # "break" should trigger break annotation
11
+ break 10
12
+ # "delete" should trigger break annotation
13
+ delete 1
14
+ # p should not trigger a breakpoint annotation
15
+ p a
16
+ # "up" should trigger annotations
17
+ up
18
+ # "b" should trigger like "break"
19
+ b 12
20
+ # "display" should trigger display annotation
21
+ display 1+2
22
+ # undisplay should trigger display annotation
23
+ undisplay 1
24
+ step
25
+ # Test error annotations
26
+ up 10
27
+ frame 100
28
+ break bogus:5
29
+ quit
@@ -0,0 +1,137 @@
1
+ gcd.rb:4
2
+ def gcd(a, b)
3
+ # # ********************************************************
4
+ # # This tests annotations
5
+ # # ********************************************************
6
+ # set debuggertesting on
7
+ Currently testing the debugger is on.
8
+ # set callstyle last
9
+ Frame call-display style is last.
10
+ # set force off
11
+ force-stepping is off.
12
+ # set annotate 3
13
+ Annotation level is 3
14
+ # # Get into gcd
15
+ # step 2
16
+ starting
17
+ stopped
18
+ breakpoints
19
+ No breakpoints.
20
+ 
21
+ stack
22
+ --> #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
23
+ #1 at line gcd.rb:18
24
+ 
25
+ variables
26
+ a = 3
27
+ b = 5
28
+ self = main
29
+ 
30
+ source gcd.rb:6
31
+ if a > b
32
+ # # "break" should trigger break annotation
33
+ # break 10
34
+ Breakpoint 1 file ./gcd.rb, line 10
35
+ breakpoints
36
+ Num Enb What
37
+ 1 y at gcd.rb:10
38
+ 
39
+ # # "delete" should trigger break annotation
40
+ # delete 1
41
+ breakpoints
42
+ No breakpoints.
43
+ 
44
+ # # p should not trigger a breakpoint annotation
45
+ # p a
46
+ 3
47
+ # # "up" should trigger annotations
48
+ # up
49
+ #1 at line gcd.rb:18
50
+ stack
51
+ #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
52
+ --> #1 at line gcd.rb:18
53
+ 
54
+ variables
55
+ self = main
56
+ 
57
+ # # "b" should trigger like "break"
58
+ # b 12
59
+ Breakpoint 2 file ./gcd.rb, line 12
60
+ breakpoints
61
+ Num Enb What
62
+ 2 y at gcd.rb:12
63
+ 
64
+ # # "display" should trigger display annotation
65
+ # display 1+2
66
+ 1: 1+2 = 3
67
+ display
68
+ 1: 1+2 = 3
69
+ 
70
+ # # undisplay should trigger display annotation
71
+ # undisplay 1
72
+ display
73
+ 
74
+ # step
75
+ display
76
+ 
77
+ starting
78
+ stopped
79
+ breakpoints
80
+ Num Enb What
81
+ 2 y at gcd.rb:12
82
+ 
83
+ display
84
+ 
85
+ stack
86
+ --> #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
87
+ #1 at line gcd.rb:18
88
+ 
89
+ variables
90
+ a = 3
91
+ b = 5
92
+ self = main
93
+ 
94
+ source gcd.rb:6
95
+ if a > b
96
+ # # Test error annotations
97
+ # up 10
98
+ error-begin
99
+ Adjusting would put us beyond the oldest (initial) frame.
100
+ 
101
+ display
102
+ 
103
+ stack
104
+ --> #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
105
+ #1 at line gcd.rb:18
106
+ 
107
+ variables
108
+ a = 3
109
+ b = 5
110
+ self = main
111
+ 
112
+ # frame 100
113
+ error-begin
114
+ Adjusting would put us beyond the oldest (initial) frame.
115
+ 
116
+ display
117
+ 
118
+ stack
119
+ --> #0 Object.gcd(a#Fixnum, b#Fixnum) at line gcd.rb:6
120
+ #1 at line gcd.rb:18
121
+ 
122
+ variables
123
+ a = 3
124
+ b = 5
125
+ self = main
126
+ 
127
+ # break bogus:5
128
+ error-begin
129
+ No source file named bogus
130
+ 
131
+ breakpoints
132
+ Num Enb What
133
+ 2 y at gcd.rb:12
134
+ 
135
+ display
136
+ 
137
+ # quit
@@ -0,0 +1,18 @@
1
+ # ********************************************************
2
+ # This tests mostly invalid breakpoints.
3
+ # We have some valid ones too.
4
+ # ********************************************************
5
+ set debuggertesting on
6
+ set callstyle last
7
+ set autoeval off
8
+ # There aren't 100 lines in gcd.rb.
9
+ break 100
10
+ break gcd.rb:100
11
+ # Line one isn't a valid stopping point.
12
+ # It is a comment.
13
+ break gcd.rb:1
14
+ # This line is okay
15
+ break gcd.rb:4
16
+ # No class Foo.
17
+ break Foo.bar
18
+ quit