ruby-debug 0.10.5.rc1 → 0.10.5.rc2

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 (166) hide show
  1. data/ChangeLog +54 -0
  2. data/Rakefile +34 -239
  3. metadata +15 -182
  4. data/test/base/base.rb +0 -77
  5. data/test/base/binding.rb +0 -22
  6. data/test/base/catchpoint.rb +0 -19
  7. data/test/base/load.rb +0 -44
  8. data/test/base/reload_bug.rb +0 -8
  9. data/test/cli/commands/catchpoint_test.rb +0 -24
  10. data/test/cli/commands/unit/regexp.rb +0 -36
  11. data/test/config.yaml +0 -8
  12. data/test/data/annotate.cmd +0 -29
  13. data/test/data/annotate.right +0 -139
  14. data/test/data/at-exit.cmd +0 -4
  15. data/test/data/at-exit.right +0 -12
  16. data/test/data/break_bad.cmd +0 -16
  17. data/test/data/break_bad.right +0 -26
  18. data/test/data/break_loop_bug.cmd +0 -5
  19. data/test/data/break_loop_bug.right +0 -15
  20. data/test/data/break_tracelines.cmd +0 -9
  21. data/test/data/break_tracelines.right +0 -17
  22. data/test/data/breakpoints-basename.cmd +0 -2
  23. data/test/data/breakpoints-basename.right +0 -10
  24. data/test/data/breakpoints.cmd +0 -37
  25. data/test/data/breakpoints.right +0 -96
  26. data/test/data/brkpt-class-bug.cmd +0 -9
  27. data/test/data/brkpt-class-bug.right +0 -18
  28. data/test/data/catch.cmd +0 -18
  29. data/test/data/catch.right +0 -41
  30. data/test/data/condition.cmd +0 -29
  31. data/test/data/condition.right +0 -67
  32. data/test/data/continue_bad.cmd +0 -4
  33. data/test/data/continue_bad.right +0 -9
  34. data/test/data/ctrl.cmd +0 -23
  35. data/test/data/ctrl.right +0 -70
  36. data/test/data/display.cmd +0 -24
  37. data/test/data/display.right +0 -44
  38. data/test/data/dollar-0.right +0 -3
  39. data/test/data/dollar-0a.right +0 -3
  40. data/test/data/dollar-0b.right +0 -3
  41. data/test/data/edit.cmd +0 -12
  42. data/test/data/edit.right +0 -19
  43. data/test/data/emacs_basic.cmd +0 -10
  44. data/test/data/emacs_basic.right +0 -24
  45. data/test/data/enable.cmd +0 -20
  46. data/test/data/enable.right +0 -36
  47. data/test/data/except-bug1.cmd +0 -7
  48. data/test/data/except-bug1.right +0 -13
  49. data/test/data/file-with-space.cmd +0 -7
  50. data/test/data/file-with-space.right +0 -9
  51. data/test/data/finish.cmd +0 -16
  52. data/test/data/finish.right +0 -31
  53. data/test/data/frame.cmd +0 -29
  54. data/test/data/frame.right +0 -62
  55. data/test/data/help.cmd +0 -20
  56. data/test/data/help.right +0 -21
  57. data/test/data/history.right +0 -7
  58. data/test/data/info-file-break.cmd +0 -4
  59. data/test/data/info-file-break.right +0 -11
  60. data/test/data/info-thread.cmd +0 -13
  61. data/test/data/info-thread.right +0 -37
  62. data/test/data/info-var-bug2.cmd +0 -5
  63. data/test/data/info-var-bug2.right +0 -10
  64. data/test/data/info-var.cmd +0 -23
  65. data/test/data/info-var.right +0 -52
  66. data/test/data/info.cmd +0 -21
  67. data/test/data/info.right +0 -80
  68. data/test/data/linetrace-jruby.right +0 -23
  69. data/test/data/linetrace.cmd +0 -6
  70. data/test/data/linetrace.right +0 -32
  71. data/test/data/linetracep.cmd +0 -7
  72. data/test/data/linetracep.right +0 -25
  73. data/test/data/list.cmd +0 -19
  74. data/test/data/list.right +0 -127
  75. data/test/data/method.cmd +0 -10
  76. data/test/data/method.right +0 -21
  77. data/test/data/methodsig.cmd +0 -10
  78. data/test/data/methodsig.right +0 -20
  79. data/test/data/noquit.right +0 -1
  80. data/test/data/output.cmd +0 -6
  81. data/test/data/output.right +0 -31
  82. data/test/data/pm-bug.cmd +0 -7
  83. data/test/data/pm-bug.right +0 -12
  84. data/test/data/post-mortem-next.cmd +0 -8
  85. data/test/data/post-mortem-next.right +0 -14
  86. data/test/data/post-mortem-osx.right +0 -32
  87. data/test/data/post-mortem.cmd +0 -13
  88. data/test/data/post-mortem.right +0 -32
  89. data/test/data/quit.cmd +0 -6
  90. data/test/data/quit.right +0 -9
  91. data/test/data/raise-jruby.right +0 -26
  92. data/test/data/raise.cmd +0 -11
  93. data/test/data/raise.right +0 -26
  94. data/test/data/save.cmd +0 -34
  95. data/test/data/save.right +0 -61
  96. data/test/data/setshow.cmd +0 -46
  97. data/test/data/setshow.right +0 -80
  98. data/test/data/source.cmd +0 -5
  99. data/test/data/source.right +0 -15
  100. data/test/data/stepping.cmd +0 -21
  101. data/test/data/stepping.right +0 -50
  102. data/test/data/test-init-cygwin.right +0 -7
  103. data/test/data/test-init-osx.right +0 -4
  104. data/test/data/test-init.right +0 -5
  105. data/test/data/trace-jruby.right +0 -14
  106. data/test/data/trace.right +0 -23
  107. data/test/example/a/example.rb +0 -1
  108. data/test/example/at-exit.rb +0 -3
  109. data/test/example/b/example.rb +0 -1
  110. data/test/example/bp_loop_issue.rb +0 -3
  111. data/test/example/breakpoints-basename.rb +0 -2
  112. data/test/example/brkpt-class-bug.rb +0 -8
  113. data/test/example/classes.rb +0 -11
  114. data/test/example/dollar-0.rb +0 -6
  115. data/test/example/except-bug1.rb +0 -4
  116. data/test/example/file with space.rb +0 -1
  117. data/test/example/gcd.rb +0 -18
  118. data/test/example/info-var-bug.rb +0 -47
  119. data/test/example/info-var-bug2.rb +0 -2
  120. data/test/example/null.rb +0 -1
  121. data/test/example/output.rb +0 -2
  122. data/test/example/pm-bug.rb +0 -3
  123. data/test/example/pm.rb +0 -11
  124. data/test/example/raise.rb +0 -3
  125. data/test/gcd-dbg-nox.rb +0 -31
  126. data/test/gcd-dbg.rb +0 -30
  127. data/test/helper.rb +0 -167
  128. data/test/pm-base.rb +0 -22
  129. data/test/rdebug-save.1 +0 -7
  130. data/test/tdebug.rb +0 -252
  131. data/test/test-annotate.rb +0 -13
  132. data/test/test-at-exit.rb +0 -13
  133. data/test/test-break-bad.rb +0 -25
  134. data/test/test-breakpoints.rb +0 -24
  135. data/test/test-brkpt-class-bug.rb +0 -13
  136. data/test/test-catch.rb +0 -13
  137. data/test/test-condition.rb +0 -13
  138. data/test/test-ctrl.rb +0 -55
  139. data/test/test-display.rb +0 -14
  140. data/test/test-dollar-0.rb +0 -33
  141. data/test/test-edit.rb +0 -14
  142. data/test/test-emacs-basic.rb +0 -13
  143. data/test/test-enable.rb +0 -13
  144. data/test/test-except-bug1.rb +0 -16
  145. data/test/test-file-with-space.rb +0 -18
  146. data/test/test-finish.rb +0 -22
  147. data/test/test-frame.rb +0 -28
  148. data/test/test-help.rb +0 -60
  149. data/test/test-hist.rb +0 -64
  150. data/test/test-info-thread.rb +0 -24
  151. data/test/test-info-var.rb +0 -30
  152. data/test/test-info.rb +0 -27
  153. data/test/test-init.rb +0 -49
  154. data/test/test-list.rb +0 -14
  155. data/test/test-method.rb +0 -20
  156. data/test/test-output.rb +0 -13
  157. data/test/test-pm.rb +0 -37
  158. data/test/test-quit.rb +0 -13
  159. data/test/test-raise.rb +0 -13
  160. data/test/test-save.rb +0 -22
  161. data/test/test-setshow.rb +0 -13
  162. data/test/test-source.rb +0 -13
  163. data/test/test-stepping.rb +0 -14
  164. data/test/test-trace.rb +0 -40
  165. data/test/thread1.rb +0 -26
  166. data/test/trunc-call.rb +0 -31
@@ -1 +0,0 @@
1
- puts 'Ha!'
data/test/example/gcd.rb DELETED
@@ -1,18 +0,0 @@
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)
@@ -1,47 +0,0 @@
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
- @@Const = 'A constant'
27
- @@var = 'a class variable'
28
- def initialize(a)
29
- @a = a # "info locals" will try to use
30
- # inspect or to_s here
31
- @b = 5
32
- end
33
- end
34
- def test_Lousy_inspect
35
- x = Lousy_inspect.new
36
- return x
37
- end
38
- def test_lousy_inspect_and_to_s
39
- x = Lousy_inspect_and_to_s.new
40
- return x
41
- end
42
- x = test_Lousy_inspect
43
- y = test_lousy_inspect_and_to_s
44
- UnsuspectingClass.new(10)
45
- UnsuspectingClass.new(x)
46
- UnsuspectingClass.new(y)
47
- y = 2
@@ -1,2 +0,0 @@
1
- s = '<%= PRODUCT[:name] %>'
2
- y = 0
data/test/example/null.rb DELETED
@@ -1 +0,0 @@
1
- # Nothing here. Move along.
@@ -1,2 +0,0 @@
1
- puts "one"
2
- puts "two"
@@ -1,3 +0,0 @@
1
- a = 1
2
- @x = 2
3
- raise
data/test/example/pm.rb DELETED
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Test Debugger.catchpoint and post-mortem handling
3
- def zero_div
4
- x = 5
5
- 1/0
6
- end
7
- x = 2
8
- zero_div
9
- raise RuntimeError
10
- x = 3
11
-
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- raise "abc"
data/test/gcd-dbg-nox.rb DELETED
@@ -1,31 +0,0 @@
1
- # This program is *NOT* supposed to be executable, but called
2
- # via ruby (in order to test that restart provides a funky $:).
3
- # This program is used to test that 'restart' works when we didn't call
4
- # the debugger initially.
5
-
6
- TOP_SRC_DIR = File.join(File.expand_path(File.dirname(__FILE__), '..')) unless
7
- defined?(TOP_SRC_DIR)
8
-
9
- $:.unshift File.join(TOP_SRC_DIR, 'ext')
10
- $:.unshift File.join(TOP_SRC_DIR, 'lib')
11
- $:.unshift File.join(TOP_SRC_DIR, 'cli')
12
- require 'ruby-debug'
13
- Debugger.init
14
-
15
- # GCD. We assume positive numbers
16
- def gcd(a, b)
17
- # Make: a <= b
18
- debugger
19
- if a > b
20
- a, b = [b, a]
21
- end
22
-
23
- return nil if a <= 0
24
-
25
- if a == 1 or b-a == 0
26
- return a
27
- end
28
- return gcd(b-a, a)
29
- end
30
-
31
- gcd(3,5)
data/test/gcd-dbg.rb DELETED
@@ -1,30 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # This program is used to test that 'restart' works when we didn't call
3
- # the debugger initially.
4
-
5
- TOP_SRC_DIR = File.join(File.expand_path(File.dirname(__FILE__), "..")) unless
6
- defined?(TOP_SRC_DIR)
7
-
8
- $:.unshift File.join(TOP_SRC_DIR, "ext")
9
- $:.unshift File.join(TOP_SRC_DIR, "lib")
10
- $:.unshift File.join(TOP_SRC_DIR, "cli")
11
- require 'ruby-debug'
12
- Debugger.start
13
-
14
- # GCD. We assume positive numbers
15
- def gcd(a, b)
16
- # Make: a <= b
17
- debugger
18
- if a > b
19
- a, b = [b, a]
20
- end
21
-
22
- return nil if a <= 0
23
-
24
- if a == 1 or b-a == 0
25
- return a
26
- end
27
- return gcd(b-a, a)
28
- end
29
-
30
- gcd(3,5)
data/test/helper.rb DELETED
@@ -1,167 +0,0 @@
1
- # Some common routines used in testing.
2
-
3
- require 'rubygems'
4
- require 'test/unit'
5
-
6
- $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
7
- $LOAD_PATH.unshift File.expand_path("../../cli", __FILE__)
8
- require 'ruby-debug'
9
-
10
- require 'fileutils'
11
- require 'yaml'
12
-
13
- # begin require 'rubygems' rescue LoadError end
14
- # require 'ruby-debug'; Debugger.start
15
-
16
- module TestHelper
17
- def run_debugger(testname, args = '', opts = {})
18
- Dir.chdir(File.dirname(__FILE__)) do
19
- rightfile = opts[:rightfile] || rightfile(testname)
20
- outfile = opts[:outfile] || "#{testname}.out"
21
- debug_pgm = opts[:runner] || 'tdebug.rb'
22
- filter = opts[:filter]
23
-
24
- if File.exists?(outfile)
25
- FileUtils.rm(outfile)
26
- end
27
-
28
- ENV['RDEBUG'] = debug_pgm
29
- ENV['TERM'] = ''
30
-
31
- # The EMACS environment variable(s) cause output to
32
- # get prefaced with null which will mess up file compares.
33
- # So turn off EMACS output processing.
34
- ENV['EMACS'] = ENV['INSIDE_EMACS'] = nil
35
-
36
- cmd = "#{load_ruby} #{load_params} ../rdbg.rb #{args} > #{outfile}"
37
- puts "'#{cmd}'" if $DEBUG
38
- `#{cmd}`
39
-
40
- got_lines = File.read(outfile).split(/\n/)
41
- correct_lines = File.read(rightfile).split(/\n/)
42
- filter.call(got_lines, correct_lines) if filter
43
-
44
- if cheap_diff(got_lines, correct_lines)
45
- FileUtils.rm(outfile)
46
- return true
47
- end
48
-
49
- false
50
- end
51
- end
52
-
53
- def rightfile(testname)
54
- jruby_file = File.join('data', "#{testname}-jruby.right")
55
- if defined?(JRUBY_VERSION) && File.exists?(jruby_file)
56
- jruby_file
57
- else
58
- File.join('data', "#{testname}.right")
59
- end
60
- end
61
-
62
- def cheap_diff(got_lines, correct_lines)
63
- if $DEBUG
64
- got_lines.each_with_index do |line, i|
65
- printf "%3d %s\n", i+1, line
66
- end
67
- end
68
- correct_lines.each_with_index do |line, i|
69
- correct_lines[i].chomp!
70
- if got_lines[i] != correct_lines[i]
71
- puts "difference found at line #{i+1}"
72
- puts "got : #{got_lines[i]}"
73
- puts "need: #{correct_lines[i]}"
74
- return false
75
- end
76
- end
77
- if correct_lines.size != got_lines.size
78
- puts("difference in number of lines: " +
79
- "#{correct_lines.size} vs. #{got_lines.size}")
80
- return false
81
- end
82
- return true
83
- end
84
-
85
- # FIXME: using this causes the same test to get run several times
86
- # and some tests fail probably because of a lack of environment isolation.
87
- # Many tests follow a basic pattern: run the debugger with a given
88
- # debugger script and compare output produced. The following creates
89
- # this kind of test.
90
- def add_test(base_name, src_dir, script_name=nil, cmd=nil, test_name=nil)
91
- puts "+++ Adding #{base_name} ++++" if $DEBUG
92
- test_name = File.join('.', 'example', base_name) unless test_name
93
- script_name = File.join('data', test_name + '.cmd') unless script_name
94
- cmd = 'gcd.rb 3 5' unless cmd
95
- eval <<-EOF
96
- def test_#{test_name}
97
- Dir.chdir(\"#{src_dir}\") do
98
- assert_equal(true,
99
- run_debugger(\"#{base_name}\",
100
- \"--script #{script_name} -- #{cmd}\"))
101
- end
102
- end
103
- EOF
104
- end
105
- module_function :add_test
106
-
107
- # Adapted from the Ruby Cookbook, Section 6.10: Comparing two files.
108
- # def diff_as_string(rightfile, checkfile, format=:unified, context_lines=3)
109
- # right_data = File.read(rightfile)
110
- # check_data = File.read(checkfile)
111
- # output = ''
112
- # diffs = Diff::LCS.diff(right_data, check_data)
113
- # return output if diffs.empty?
114
- # oldhunk = hunk = nil
115
- # file_length_difference = 0
116
- # diffs.each do |piece|
117
- # begin
118
- # hunk = Diff::LCS::Hunk.new(right_data, check_data, piece,
119
- # context_lines, file_length_difference)
120
- # next unless oldhunk
121
- #
122
- # # Hunks may overlap, which is why we need to be careful when our
123
- # # diff includes lines of context. Otherwise, we might print
124
- # # redundant lines.
125
- # if (context_lines > 0) and hunk.overlaps?(oldhunk)
126
- # hunk.unshift(oldhunk)
127
- # else
128
- # output << oldhunk.diff(format)
129
- # end
130
- # ensure
131
- # oldhunk = hunk
132
- # output << '\n'
133
- # end
134
- # end
135
-
136
- # # Handle the last remaining hunk
137
- # output << oldhunk.diff(format) << '\n'
138
- # end
139
-
140
- # Loads key from the _config_._yaml_ file.
141
- def config_load(key, may_be_nil=false, default_value='')
142
- conf = File.join('config.private.yaml') # try private first
143
- unless File.exists?(conf)
144
- if defined?(JRUBY_VERSION)
145
- conf = File.join('config.jruby.yaml')
146
- else
147
- conf = File.join('config.yaml')
148
- end
149
- end
150
- value = YAML.load_file(conf)[key]
151
- assert_not_nil(value, "#{key} is set in config.yaml") unless may_be_nil
152
- value || default_value
153
- end
154
- module_function :config_load
155
-
156
- def load_ruby
157
- config_load('ruby', true)
158
- end
159
- module_function :load_ruby
160
-
161
- def load_params
162
- config_load('ruby_params', true)
163
- end
164
- module_function :load_params
165
-
166
- end
167
-
data/test/pm-base.rb DELETED
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Test post-mortem handling using only ruby-debug-base.
3
- src_dir = File.dirname(__FILE__)
4
- %w(ext lib cli).each do |dir|
5
- $:.unshift File.join(src_dir, '..', dir)
6
- end
7
- require 'ruby-debug-base'
8
-
9
- class CommandProcessor
10
- def at_line(context, file, line)
11
- puts 'file: %s, line: %s' % [ File.basename(file), line ]
12
- exit!
13
- end
14
- end
15
-
16
- Debugger.start(:post_mortem => true)
17
- Debugger.handler = CommandProcessor.new
18
- def zero_div
19
- 1/0
20
- end
21
- zero_div
22
-
data/test/rdebug-save.1 DELETED
@@ -1,7 +0,0 @@
1
- break example/gcd.rb:10
2
- break example/gcd.rb:12 if a > b
3
- set autoeval on
4
- set basename off
5
- set debuggertesting off
6
- set autolist off
7
- set autoirb off
data/test/tdebug.rb DELETED
@@ -1,252 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # -*- Ruby -*-
3
- # This is a hacked down copy of rdebug which can be used for testing
4
- # FIXME: use the real rdebug script - DRY.
5
-
6
- require 'stringio'
7
- require 'rubygems'
8
- require 'optparse'
9
- require "ostruct"
10
-
11
- TOP_SRC_DIR = File.join(File.dirname(__FILE__), "..") unless
12
- defined?(TOP_SRC_DIR)
13
-
14
- $:.unshift File.join(TOP_SRC_DIR, "ext")
15
- $:.unshift File.join(TOP_SRC_DIR, "lib")
16
- $:.unshift File.join(TOP_SRC_DIR, "cli")
17
-
18
- def debug_program(options)
19
- # Make sure Ruby script syntax checks okay.
20
- # Otherwise we get a load message that looks like rdebug has
21
- # a problem.
22
- output = `ruby -c #{Debugger::PROG_SCRIPT.inspect} 2>&1`
23
- if $?.exitstatus != 0 and RUBY_PLATFORM !~ /mswin/
24
- puts output
25
- exit $?.exitstatus
26
- end
27
- print "\032\032starting\n" if Debugger.annotate and Debugger.annotate > 2
28
- unless options.no_rewrite_program
29
- # Set $0 so things like __FILE == $0 work.
30
- # A more reliable way to do this is to put $0 = __FILE__ *after*
31
- # loading the script to be debugged. For this, adding a debug hook
32
- # for the first time and then switching to the debug hook that's
33
- # normally used would be helpful. Doing this would also help other
34
- # first-time initializations such as reloading debugger state
35
- # after a restart.
36
-
37
- # However This is just a little more than I want to take on right
38
- # now, so I think I'll stick with the slightly hacky approach.
39
- $RDEBUG_0 = $0
40
-
41
- # cygwin does some sort of funky truncation on $0 ./abcdef => ./ab
42
- # probably something to do with 3-letter extension truncation.
43
- # The hacky workaround is to do slice assignment. Ugh.
44
- d0 = if '.' == File.dirname(Debugger::PROG_SCRIPT) and
45
- Debugger::PROG_SCRIPT[0..0] != '.'
46
- File.join('.', Debugger::PROG_SCRIPT)
47
- else
48
- Debugger::PROG_SCRIPT
49
- end
50
- if $0.frozen?
51
- $0 = d0
52
- else
53
- $0[0..-1] = d0
54
- end
55
- end
56
-
57
- # Record where we are we can know if the call stack has been
58
- # truncated or not.
59
- Debugger.start_sentinal=caller(0)[1]
60
-
61
- bt = Debugger.debug_load(Debugger::PROG_SCRIPT, !options.nostop, false)
62
- if bt
63
- if options.post_mortem
64
- Debugger.handle_post_mortem(bt)
65
- else
66
- print bt.backtrace.map{|l| "\t#{l}"}.join("\n"), "\n"
67
- print "Uncaught exception: #{bt}\n"
68
- end
69
- end
70
- end
71
-
72
- options = OpenStruct.new(
73
- 'annotate' => false,
74
- 'emacs' => false,
75
- 'frame_bind' => false,
76
- 'no-quit' => false,
77
- 'no-stop' => false,
78
- 'nx' => false,
79
- 'post_mortem' => false,
80
- 'script' => nil,
81
- 'tracing' => false,
82
- 'verbose_long'=> false,
83
- 'wait' => false
84
- )
85
-
86
- require "ruby-debug"
87
-
88
- program = File.basename($0)
89
- opts = OptionParser.new do |opts|
90
- opts.banner = <<EOB
91
- #{program} #{Debugger::VERSION}
92
- Usage: #{program} [options] <script.rb> -- <script.rb parameters>
93
- EOB
94
- opts.separator ""
95
- opts.separator "Options:"
96
- opts.on("-A", "--annotate LEVEL", Integer, "Set annotation level") do
97
- |Debugger.annotate|
98
- end
99
- opts.on("-d", "--debug", "Set $DEBUG=true") {$DEBUG = true}
100
- opts.on("--emacs-basic", "Activates basic Emacs mode") do
101
- ENV['EMACS'] = '1'
102
- options.emacs = true
103
- end
104
- opts.on("--keep-frame-binding", "Keep frame bindings") do
105
- options.frame_bind = true
106
- end
107
- opts.on("-m", "--post-mortem", "Activate post-mortem mode") do
108
- options.post_mortem = true
109
- end
110
- opts.on("--no-control", "Do not automatically start control thread") do
111
- options.control = false
112
- end
113
- opts.on("--no-quit", "Do not quit when script finishes") do
114
- options.noquit = true
115
- end
116
- opts.on("--no-stop", "Do not stop when script is loaded") do
117
- options.nostop = true
118
- end
119
- opts.on("-nx", "Not run debugger initialization files (e.g. .rdebugrc") do
120
- options.nx = true
121
- end
122
- opts.on("-I", "--include PATH", String, "Add PATH to $LOAD_PATH") do |path|
123
- $LOAD_PATH.unshift(path)
124
- end
125
- opts.on("-r", "--require SCRIPT", String,
126
- "Require the library, before executing your script") do |name|
127
- if name == 'debug'
128
- puts "ruby-debug is not compatible with Ruby's 'debug' library. This option is ignored."
129
- else
130
- require name
131
- end
132
- end
133
- opts.on("--script FILE", String, "Name of the script file to run") do |options.script|
134
- unless File.exists?(options.script)
135
- puts "Script file '#{options.script}' is not found"
136
- exit
137
- end
138
- end
139
- opts.on("-x", "--trace", "Turn on line tracing") {options.tracing = true}
140
- ENV['EMACS'] = nil unless options.emacs
141
- opts.separator ""
142
- opts.separator "Common options:"
143
- opts.on_tail("--help", "Show this message") do
144
- puts opts
145
- exit
146
- end
147
- opts.on_tail("--version",
148
- "Print the version") do
149
- puts "ruby-debug #{Debugger::VERSION}"
150
- exit
151
- end
152
- opts.on("--verbose", "Turn on verbose mode") do
153
- $VERBOSE = true
154
- options.verbose_long = true
155
- end
156
- opts.on_tail("-v",
157
- "Print version number, then turn on verbose mode") do
158
- puts "ruby-debug #{Debugger::VERSION}"
159
- $VERBOSE = true
160
- end
161
- end
162
-
163
- begin
164
- if not defined? Debugger::ARGV
165
- Debugger::ARGV = ARGV.clone
166
- end
167
- rdebug_path = File.expand_path($0)
168
- if RUBY_PLATFORM =~ /mswin/
169
- rdebug_path += '.cmd' unless rdebug_path =~ /\.cmd$/i
170
- end
171
- Debugger::RDEBUG_SCRIPT = rdebug_path
172
- Debugger::RDEBUG_FILE = __FILE__
173
- Debugger::INITIAL_DIR = Dir.pwd
174
- opts.parse! ARGV
175
- rescue StandardError => e
176
- puts opts
177
- puts
178
- puts e.message
179
- exit(-1)
180
- end
181
-
182
- if ARGV.empty?
183
- exit if $VERBOSE and not options.verbose_long
184
- puts opts
185
- puts
186
- puts 'Must specify a script to run'
187
- exit(-1)
188
- end
189
-
190
- # save script name
191
- Debugger::PROG_SCRIPT = ARGV.shift
192
-
193
- # install interruption handler
194
- trap('INT') { Debugger.interrupt_last }
195
-
196
- # set options
197
- Debugger.wait_connection = false
198
- Debugger.keep_frame_binding = options.frame_bind
199
-
200
- # Add Debugger trace hook.
201
- Debugger.start
202
-
203
- # start control thread
204
- Debugger.start_control(options.host, options.cport) if options.control
205
-
206
- # activate post-mortem
207
- Debugger.post_mortem if options.post_mortem
208
-
209
- # Set up an interface to read commands from a debugger script file.
210
- if options.script
211
- Debugger.interface = Debugger::ScriptInterface.new(options.script,
212
- STDOUT, true)
213
- end
214
- options.nostop = true if options.tracing
215
- Debugger.tracing = options.tracing
216
-
217
- # Make sure Ruby script syntax checks okay.
218
- # Otherwise we get a load message that looks like rdebug has
219
- # a problem.
220
- output = `ruby -c #{Debugger::PROG_SCRIPT.inspect} 2>&1`
221
- if $?.exitstatus != 0 and RUBY_PLATFORM !~ /mswin/
222
- puts output
223
- exit $?.exitstatus
224
- end
225
-
226
- # load initrc script (e.g. .rdebugrc)
227
- Debugger.run_init_script(StringIO.new) unless options.nx
228
-
229
- # run startup script if specified
230
- if options.script
231
- Debugger.run_script(options.script)
232
- end
233
- # activate post-mortem
234
- Debugger.post_mortem if options.post_mortem
235
- options.stop = false if options.tracing
236
- Debugger.tracing = options.tracing
237
-
238
- if options.noquit
239
- if Debugger.started?
240
- until Debugger.stop do end
241
- end
242
- debug_program(options)
243
- print "The program finished.\n" unless
244
- Debugger.annotate.to_i > 1 # annotate has its own way
245
- interface = Debugger::LocalInterface.new
246
- # Not sure if ControlCommandProcessor is really the right
247
- # thing to use. CommandProcessor requires a state.
248
- processor = Debugger::ControlCommandProcessor.new(interface)
249
- processor.process_commands
250
- else
251
- debug_program(options)
252
- end