rb8-trepanning 0.1.3

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 (274) hide show
  1. data/.gitignore +3 -0
  2. data/CHANGES +34 -0
  3. data/ChangeLog +875 -0
  4. data/README.textile +59 -0
  5. data/Rakefile +215 -0
  6. data/app/.gitignore +1 -0
  7. data/app/cmd_parse.kpeg +241 -0
  8. data/app/cmd_parse.rb +212 -0
  9. data/app/cmd_parser.rb +1948 -0
  10. data/app/complete.rb +79 -0
  11. data/app/default.rb +90 -0
  12. data/app/display.rb +148 -0
  13. data/app/eventbuffer.rb +147 -0
  14. data/app/frame.rb +166 -0
  15. data/app/irb.rb +114 -0
  16. data/app/options.rb +200 -0
  17. data/app/run.rb +74 -0
  18. data/app/util.rb +65 -0
  19. data/bin/.gitignore +1 -0
  20. data/bin/trepan8 +115 -0
  21. data/data/.gitignore +1 -0
  22. data/data/irbrc +41 -0
  23. data/interface/.gitignore +1 -0
  24. data/interface/base_intf.rb +109 -0
  25. data/interface/client.rb +82 -0
  26. data/interface/comcodes.rb +20 -0
  27. data/interface/script.rb +110 -0
  28. data/interface/server.rb +147 -0
  29. data/interface/user.rb +165 -0
  30. data/io/base_io.rb +148 -0
  31. data/io/input.rb +158 -0
  32. data/io/null_output.rb +46 -0
  33. data/io/string_array.rb +156 -0
  34. data/io/tcpclient.rb +129 -0
  35. data/io/tcpfns.rb +33 -0
  36. data/io/tcpserver.rb +141 -0
  37. data/lib/debugger.rb +8 -0
  38. data/lib/trepanning.rb +283 -0
  39. data/processor/.gitignore +1 -0
  40. data/processor/command-ruby-debug/breakpoints.rb +155 -0
  41. data/processor/command-ruby-debug/catchpoint.rb +55 -0
  42. data/processor/command-ruby-debug/condition.rb +49 -0
  43. data/processor/command-ruby-debug/control.rb +31 -0
  44. data/processor/command-ruby-debug/display.rb +120 -0
  45. data/processor/command-ruby-debug/enable.rb +202 -0
  46. data/processor/command-ruby-debug/frame.rb +199 -0
  47. data/processor/command-ruby-debug/help.rb +63 -0
  48. data/processor/command-ruby-debug/info.rb +359 -0
  49. data/processor/command-ruby-debug/method.rb +84 -0
  50. data/processor/command-ruby-debug/reload.rb +40 -0
  51. data/processor/command-ruby-debug/save.rb +90 -0
  52. data/processor/command-ruby-debug/set.rb +237 -0
  53. data/processor/command-ruby-debug/show.rb +251 -0
  54. data/processor/command-ruby-debug/source.rb +36 -0
  55. data/processor/command-ruby-debug/threads.rb +189 -0
  56. data/processor/command-ruby-debug/trace.rb +57 -0
  57. data/processor/command-ruby-debug/variables.rb +199 -0
  58. data/processor/command.rb +270 -0
  59. data/processor/command/.gitignore +1 -0
  60. data/processor/command/alias.rb +54 -0
  61. data/processor/command/backtrace.rb +123 -0
  62. data/processor/command/base/cmd.rb +177 -0
  63. data/processor/command/base/subcmd.rb +230 -0
  64. data/processor/command/base/submgr.rb +188 -0
  65. data/processor/command/base/subsubcmd.rb +128 -0
  66. data/processor/command/base/subsubmgr.rb +199 -0
  67. data/processor/command/break.rb +114 -0
  68. data/processor/command/catch.rb +71 -0
  69. data/processor/command/complete.rb +39 -0
  70. data/processor/command/continue.rb +57 -0
  71. data/processor/command/directory.rb +50 -0
  72. data/processor/command/disable.rb +85 -0
  73. data/processor/command/display.rb +78 -0
  74. data/processor/command/down.rb +54 -0
  75. data/processor/command/edit.rb +79 -0
  76. data/processor/command/enable.rb +48 -0
  77. data/processor/command/eval.rb +90 -0
  78. data/processor/command/exit.rb +66 -0
  79. data/processor/command/finish.rb +59 -0
  80. data/processor/command/frame.rb +97 -0
  81. data/processor/command/help.rb +230 -0
  82. data/processor/command/help/.gitignore +1 -0
  83. data/processor/command/help/README +10 -0
  84. data/processor/command/help/command.txt +58 -0
  85. data/processor/command/help/examples.txt +16 -0
  86. data/processor/command/help/filename.txt +40 -0
  87. data/processor/command/help/location.txt +37 -0
  88. data/processor/command/help/suffixes.txt +17 -0
  89. data/processor/command/info.rb +28 -0
  90. data/processor/command/info_subcmd/.gitignore +1 -0
  91. data/processor/command/info_subcmd/args.rb +39 -0
  92. data/processor/command/info_subcmd/breakpoints.rb +80 -0
  93. data/processor/command/info_subcmd/catch.rb +36 -0
  94. data/processor/command/info_subcmd/files.rb +39 -0
  95. data/processor/command/info_subcmd/globals.rb +64 -0
  96. data/processor/command/info_subcmd/line.rb +30 -0
  97. data/processor/command/info_subcmd/locals.rb +69 -0
  98. data/processor/command/info_subcmd/macro.rb +62 -0
  99. data/processor/command/info_subcmd/program.rb +51 -0
  100. data/processor/command/info_subcmd/ruby.rb +57 -0
  101. data/processor/command/info_subcmd/source.rb +74 -0
  102. data/processor/command/info_subcmd/stack.rb +25 -0
  103. data/processor/command/info_subcmd/threads.rb +75 -0
  104. data/processor/command/kill.rb +78 -0
  105. data/processor/command/list.rb +117 -0
  106. data/processor/command/macro.rb +68 -0
  107. data/processor/command/next.rb +79 -0
  108. data/processor/command/parsetree.rb +56 -0
  109. data/processor/command/pp.rb +40 -0
  110. data/processor/command/pr.rb +37 -0
  111. data/processor/command/ps.rb +40 -0
  112. data/processor/command/restart.rb +86 -0
  113. data/processor/command/save.rb +58 -0
  114. data/processor/command/set.rb +47 -0
  115. data/processor/command/set_subcmd/.gitignore +1 -0
  116. data/processor/command/set_subcmd/abbrev.rb +25 -0
  117. data/processor/command/set_subcmd/auto.rb +27 -0
  118. data/processor/command/set_subcmd/auto_subcmd/.gitignore +1 -0
  119. data/processor/command/set_subcmd/auto_subcmd/eval.rb +53 -0
  120. data/processor/command/set_subcmd/auto_subcmd/irb.rb +33 -0
  121. data/processor/command/set_subcmd/auto_subcmd/list.rb +33 -0
  122. data/processor/command/set_subcmd/basename.rb +25 -0
  123. data/processor/command/set_subcmd/callstyle.rb +46 -0
  124. data/processor/command/set_subcmd/confirm.rb +24 -0
  125. data/processor/command/set_subcmd/debug.rb +47 -0
  126. data/processor/command/set_subcmd/different.rb +61 -0
  127. data/processor/command/set_subcmd/highlight.rb +43 -0
  128. data/processor/command/set_subcmd/max.rb +26 -0
  129. data/processor/command/set_subcmd/max_subcmd/list.rb +49 -0
  130. data/processor/command/set_subcmd/max_subcmd/stack.rb +50 -0
  131. data/processor/command/set_subcmd/max_subcmd/string.rb +76 -0
  132. data/processor/command/set_subcmd/max_subcmd/width.rb +49 -0
  133. data/processor/command/set_subcmd/reload.rb +42 -0
  134. data/processor/command/set_subcmd/timer.rb +58 -0
  135. data/processor/command/set_subcmd/trace.rb +37 -0
  136. data/processor/command/set_subcmd/trace_subcmd/buffer.rb +42 -0
  137. data/processor/command/set_subcmd/trace_subcmd/print.rb +41 -0
  138. data/processor/command/shell.rb +139 -0
  139. data/processor/command/show.rb +39 -0
  140. data/processor/command/show_subcmd/.gitignore +1 -0
  141. data/processor/command/show_subcmd/abbrev.rb +20 -0
  142. data/processor/command/show_subcmd/alias.rb +46 -0
  143. data/processor/command/show_subcmd/args.rb +34 -0
  144. data/processor/command/show_subcmd/auto.rb +28 -0
  145. data/processor/command/show_subcmd/auto_subcmd/eval.rb +27 -0
  146. data/processor/command/show_subcmd/auto_subcmd/irb.rb +23 -0
  147. data/processor/command/show_subcmd/auto_subcmd/list.rb +22 -0
  148. data/processor/command/show_subcmd/basename.rb +20 -0
  149. data/processor/command/show_subcmd/callstyle.rb +22 -0
  150. data/processor/command/show_subcmd/confirm.rb +18 -0
  151. data/processor/command/show_subcmd/debug.rb +26 -0
  152. data/processor/command/show_subcmd/debug_subcmd/dbgr.rb +21 -0
  153. data/processor/command/show_subcmd/debug_subcmd/skip.rb +22 -0
  154. data/processor/command/show_subcmd/debug_subcmd/step.rb +22 -0
  155. data/processor/command/show_subcmd/different.rb +26 -0
  156. data/processor/command/show_subcmd/directories.rb +22 -0
  157. data/processor/command/show_subcmd/highlight.rb +24 -0
  158. data/processor/command/show_subcmd/max.rb +27 -0
  159. data/processor/command/show_subcmd/max_subcmd/list.rb +38 -0
  160. data/processor/command/show_subcmd/max_subcmd/stack.rb +36 -0
  161. data/processor/command/show_subcmd/max_subcmd/string.rb +42 -0
  162. data/processor/command/show_subcmd/max_subcmd/width.rb +37 -0
  163. data/processor/command/show_subcmd/reload.rb +18 -0
  164. data/processor/command/show_subcmd/timer.rb +18 -0
  165. data/processor/command/show_subcmd/trace.rb +29 -0
  166. data/processor/command/show_subcmd/trace_subcmd/buffer.rb +65 -0
  167. data/processor/command/show_subcmd/trace_subcmd/print.rb +23 -0
  168. data/processor/command/show_subcmd/version.rb +23 -0
  169. data/processor/command/source.rb +134 -0
  170. data/processor/command/step.rb +81 -0
  171. data/processor/command/tbreak.rb +19 -0
  172. data/processor/command/unalias.rb +44 -0
  173. data/processor/command/undisplay.rb +59 -0
  174. data/processor/command/up.rb +72 -0
  175. data/processor/default.rb +56 -0
  176. data/processor/display.rb +17 -0
  177. data/processor/eval.rb +113 -0
  178. data/processor/eventbuf.rb +105 -0
  179. data/processor/frame.rb +172 -0
  180. data/processor/help.rb +92 -0
  181. data/processor/helper.rb +76 -0
  182. data/processor/hook.rb +134 -0
  183. data/processor/load_cmds.rb +258 -0
  184. data/processor/location.rb +174 -0
  185. data/processor/main.rb +455 -0
  186. data/processor/mock.rb +136 -0
  187. data/processor/msg.rb +61 -0
  188. data/processor/processor.rb +674 -0
  189. data/processor/running.rb +168 -0
  190. data/processor/stepping.rb +18 -0
  191. data/processor/subcmd.rb +161 -0
  192. data/processor/validate.rb +355 -0
  193. data/processor/virtual.rb +34 -0
  194. data/test/data/.gitignore +1 -0
  195. data/test/data/break_bad.cmd +19 -0
  196. data/test/data/break_bad.right +29 -0
  197. data/test/data/break_loop_bug.cmd +5 -0
  198. data/test/data/break_loop_bug.right +15 -0
  199. data/test/data/dollar-0.right +2 -0
  200. data/test/data/dollar-0a.right +2 -0
  201. data/test/data/dollar-0b.right +2 -0
  202. data/test/data/edit.cmd +14 -0
  203. data/test/data/edit.right +24 -0
  204. data/test/data/file-with-space.cmd +6 -0
  205. data/test/data/file-with-space.right +4 -0
  206. data/test/data/printvar.cmd +17 -0
  207. data/test/data/printvar.right +31 -0
  208. data/test/data/raise.cmd +11 -0
  209. data/test/data/raise.right +19 -0
  210. data/test/data/source.cmd +5 -0
  211. data/test/data/source.right +18 -0
  212. data/test/data/stepping-1.9.right +50 -0
  213. data/test/data/stepping.cmd +21 -0
  214. data/test/data/stepping.right +48 -0
  215. data/test/data/trepan8-save.1 +6 -0
  216. data/test/example/bp_loop_issue.rb +3 -0
  217. data/test/example/break-bug.rb +7 -0
  218. data/test/example/brkpt-class-bug.rb +8 -0
  219. data/test/example/classes.rb +11 -0
  220. data/test/example/dollar-0.rb +5 -0
  221. data/test/example/except-bug1.rb +4 -0
  222. data/test/example/except-bug2.rb +7 -0
  223. data/test/example/file with space.rb +1 -0
  224. data/test/example/gcd.rb +18 -0
  225. data/test/example/info-var-bug.rb +47 -0
  226. data/test/example/info-var-bug2.rb +2 -0
  227. data/test/example/null.rb +1 -0
  228. data/test/example/pm-bug.rb +3 -0
  229. data/test/example/pm.rb +11 -0
  230. data/test/example/raise.rb +3 -0
  231. data/test/integration/.gitignore +4 -0
  232. data/test/integration/config.yaml +8 -0
  233. data/test/integration/helper.rb +154 -0
  234. data/test/integration/test-break_bad.rb +26 -0
  235. data/test/integration/test-dollar-0.rb +31 -0
  236. data/test/integration/test-edit.rb +17 -0
  237. data/test/integration/test-file-with-space.rb +26 -0
  238. data/test/integration/test-printvar.rb +17 -0
  239. data/test/integration/test-raise.rb +21 -0
  240. data/test/integration/test-source.rb +16 -0
  241. data/test/integration/test-stepping.rb +24 -0
  242. data/test/unit/.gitignore +1 -0
  243. data/test/unit/cmd-helper.rb +52 -0
  244. data/test/unit/mock-helper.rb +12 -0
  245. data/test/unit/test-app-cmd_parse.rb +97 -0
  246. data/test/unit/test-app-cmd_parser.rb +23 -0
  247. data/test/unit/test-app-complete.rb +39 -0
  248. data/test/unit/test-app-frame.rb +32 -0
  249. data/test/unit/test-app-options.rb +92 -0
  250. data/test/unit/test-app-run.rb +14 -0
  251. data/test/unit/test-app-util.rb +44 -0
  252. data/test/unit/test-base-cmd.rb +45 -0
  253. data/test/unit/test-base-subcmd.rb +57 -0
  254. data/test/unit/test-base-submgr.rb +23 -0
  255. data/test/unit/test-base-subsubcmd.rb +17 -0
  256. data/test/unit/test-cmd-alias.rb +48 -0
  257. data/test/unit/test-cmd-exit.rb +27 -0
  258. data/test/unit/test-cmd-help.rb +104 -0
  259. data/test/unit/test-cmd-kill.rb +46 -0
  260. data/test/unit/test-cmd-source.rb +34 -0
  261. data/test/unit/test-completion.rb +42 -0
  262. data/test/unit/test-intf-user.rb +46 -0
  263. data/test/unit/test-io-input.rb +27 -0
  264. data/test/unit/test-io-tcp.rb +33 -0
  265. data/test/unit/test-io-tcpclient.rb +54 -0
  266. data/test/unit/test-io-tcpfns.rb +17 -0
  267. data/test/unit/test-io-tcpserver.rb +50 -0
  268. data/test/unit/test-proc-eval.rb +36 -0
  269. data/test/unit/test-proc-hook.rb +30 -0
  270. data/test/unit/test-proc-load_cmds.rb +50 -0
  271. data/test/unit/test-proc-location.rb +79 -0
  272. data/test/unit/test-subcmd-help.rb +44 -0
  273. data/trepan8.gemspec +52 -0
  274. metadata +391 -0
@@ -0,0 +1,23 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative '../../base/subsubcmd'
5
+
6
+ class Trepan::SubSubcommand::ShowTracePrint < Trepan::ShowBoolSubSubcommand
7
+ unless defined?(HELP)
8
+ HELP = "Show tracing print status"
9
+ MIN_ABBREV = 'p'.size
10
+ NAME = File.basename(__FILE__, '.rb')
11
+ PREFIX = %w(show trace buffer)
12
+ SHORT_HELP = "Show tracing print status"
13
+ end
14
+
15
+ end
16
+
17
+ if __FILE__ == $0
18
+ # Demo it.
19
+ require_relative '../../../mock'
20
+ require_relative '../trace'
21
+ cmd = MockDebugger::subsub_setup(Trepan::SubSubcommand::ShowTrace,
22
+ Trepan::SubSubcommand::ShowTracePrint)
23
+ end
@@ -0,0 +1,23 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative '../../../app/options'
5
+ require_relative '../base/subcmd'
6
+
7
+ class Trepan::Subcommand::ShowVersion < Trepan::Subcommand
8
+ unless defined?(HELP)
9
+ Trepanning::Subcommand.set_name_prefix(__FILE__, self)
10
+ HELP = "Show what version of #{Trepan::PROGRAM} this is"
11
+ MIN_ABBREV = 'vers'.size
12
+ end
13
+
14
+ def run(args)
15
+ msg Trepan::show_version
16
+ end
17
+ end
18
+
19
+ if __FILE__ == $0
20
+ # Demo it.
21
+ require_relative '../../mock'
22
+ cmd = MockDebugger::sub_setup(Trepan::Subcommand::ShowVersion)
23
+ end
@@ -0,0 +1,134 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require 'optparse'
4
+
5
+ # Our local modules
6
+ require 'rubygems'; require 'require_relative'
7
+ require_relative 'base/cmd'
8
+ require_relative '../../interface/script'
9
+ require_relative '../../io/null_output'
10
+ require_relative '../../app/default'
11
+
12
+ class Trepan::Command::SourceCommand < Trepan::Command
13
+ unless defined?(HELP)
14
+ NAME = File.basename(__FILE__, '.rb')
15
+ HELP = <<-HELP
16
+ #{NAME} [options] FILE
17
+
18
+ options:
19
+ -q | --quiet | --no-quiet
20
+ -c | --continue | --no-continue
21
+ -Y | --yes | -N | --no
22
+ -v | --verbose | --no-verbose
23
+
24
+ Read debugger commands from a file named FILE. Optional -v switch
25
+ causes each command in FILE to be echoed as it is executed. Option -Y
26
+ sets the default value in any confirmation command to be 'yes' and -N
27
+ sets the default value to 'no'.
28
+
29
+ Option -q will turn off any debugger output that normally occurs in the
30
+ running of the program.
31
+
32
+ Note that the command startup file #{Trepan::CMD_INITFILE_BASE} is read automatically
33
+ via a #{NAME} command the debugger is started.
34
+
35
+ An error in any command terminates execution of the command file
36
+ unless option -c or --continue is given.
37
+ HELP
38
+ CATEGORY = 'support'
39
+ MIN_ARGS = 1 # Need at least this many
40
+ MAX_ARGS = nil
41
+ SHORT_HELP = 'Read and run debugger commands from a file'
42
+
43
+ DEFAULT_OPTIONS = {
44
+ :abort_on_error => false,
45
+ :confirm_val => false,
46
+ :quiet => false,
47
+ :verbose => false
48
+ }
49
+
50
+ end
51
+
52
+ def complete(prefix)
53
+ files = Readline::FILENAME_COMPLETION_PROC.call(prefix) || []
54
+ opts = %w(-c --continue --no-continue -N --no -y --yes
55
+ --verbose --no-verbose) + files
56
+ Trepan::Complete.complete_token(opts, prefix)
57
+ end
58
+
59
+ def parse_options(options, args) # :nodoc
60
+ seen_yes_no = false
61
+ parser = OptionParser.new do |opts|
62
+ opts.on('-c', '--[no-]continue',
63
+ 'Continue in the face of errors') do
64
+ |v|
65
+ options[:abort_on_error] = !v
66
+ end
67
+ opts.on('-v',
68
+ '--[no-]verbose', 'echo each command as it is executed') do
69
+ |v|
70
+ options[:verbose] = v
71
+ end
72
+ opts.on('-N', '--no', "Use 'no' in any confirmation prompts") do
73
+ |v|
74
+ if seen_yes_no
75
+ msg('Yes/No option already seen. This option (no) ignored.')
76
+ end
77
+ options[:confirm_val] = false
78
+ end
79
+ opts.on('-q', '--[no-]quiet', 'Silence debugger output') do
80
+ |v|
81
+ options[:quiet] = v
82
+ end
83
+ opts.on('-Y', '--yes', "Use 'yes' in any confirmation prompts") do
84
+ |v|
85
+ if seen_yes_no
86
+ msg("Yes/No option already seen. This option, --yes, ignored.")
87
+ end
88
+ options[:confirm_val] = true
89
+ seen_yes_no = true
90
+ end
91
+ end
92
+ parser.parse(args)
93
+ return options
94
+ end
95
+
96
+ def run(args)
97
+ options = parse_options(DEFAULT_OPTIONS.dup, args[1..-2])
98
+ intf = @proc.interfaces
99
+ output = options[:quiet] ? Trepan::OutputNull.new(nil) : intf[-1].output
100
+
101
+ filename = args[-1]
102
+
103
+ expanded_file = File.expand_path(filename)
104
+ unless File.readable?(expanded_file)
105
+ errmsg("Debugger command file '%s' (%s) is not a readable file" %
106
+ [filename, expanded_file])
107
+ return false
108
+ end
109
+
110
+ # Push a new debugger interface.
111
+ script_intf = Trepan::ScriptInterface.new(expanded_file, output, options)
112
+ intf << script_intf
113
+ return false
114
+ end
115
+ end
116
+
117
+ # Demo it
118
+ if __FILE__ == $0
119
+ require_relative '../mock'
120
+ dbgr, cmd = MockDebugger::setup
121
+ %w(--quiet -q --no-quiet --continue --no-continue -c -v --verbose
122
+ --no-verbose).each do |opt|
123
+ puts "parsing #{opt}"
124
+ options =
125
+ cmd.parse_options(Trepan::Command::SourceCommand::DEFAULT_OPTIONS.dup,
126
+ opt)
127
+ p options
128
+ end
129
+
130
+ if ARGV.size >= 1
131
+ puts "running... #{cmd.name} #{ARGV}"
132
+ cmd.run([cmd.name, *ARGV])
133
+ end
134
+ end
@@ -0,0 +1,81 @@
1
+ # Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
2
+ require 'rubygems'; require 'require_relative'
3
+ require_relative 'base/cmd'
4
+
5
+ class Trepan::Command::StepCommand < Trepan::Command
6
+
7
+ ALIASES = %w(s s+ s- step+ step-)
8
+ CATEGORY = 'running'
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ HELP = <<-HELP
11
+ #{NAME}[+|-] [into] [count]
12
+
13
+ Execute the current line, stopping at the next line. Sometimes this
14
+ is called 'step into'.
15
+
16
+ Behaves like 'next', but if there is a method call on the current line,
17
+ execution is stopped in the called method.
18
+
19
+ Examples:
20
+ #{NAME} # step 1 line
21
+ #{NAME} 1 # same as above
22
+ #{NAME} into # same as above
23
+ #{NAME} into 1 # same as above
24
+ #{NAME} 5/5+0 # same as above
25
+ #{NAME}+ # same but force stopping on a new line
26
+ #{NAME}- # same but force stopping on a new line a new frame added
27
+ #{NAME} until a > b
28
+ #{NAME} over # same as 'next'
29
+ #{NAME} out # same as 'finish'
30
+
31
+ Related and similar is the 'next' (step over) and 'finish' (step out)
32
+ commands.
33
+
34
+ See also the commands:
35
+ 'continue', 'next', 'nexti' and 'finish' for other ways to progress execution.
36
+ HELP
37
+ NEED_RUNNING = true
38
+ SHORT_HELP = 'Step into next method call or to next line'
39
+
40
+ Keyword_to_related_cmd = {
41
+ 'out' => 'finish',
42
+ 'over' => 'next',
43
+ 'into' => 'step',
44
+ }
45
+
46
+ # self.allow_in_post_mortem = false
47
+ # self.need_context = true
48
+
49
+ def run(args)
50
+ condition = nil
51
+ opts = {}
52
+ if args.size == 1
53
+ step_count = 1
54
+ else
55
+ replace_cmd = Keyword_to_related_cmd[args[1]]
56
+ if replace_cmd
57
+ cmd = @proc.commands[replace_cmd]
58
+ return cmd.run([replace_cmd] + args[2..-1])
59
+ end
60
+ step_str = args[1]
61
+ opts = @proc.parse_next_step_suffix(args[0])
62
+ count_opts = {
63
+ :msg_on_error =>
64
+ "The #{NAME} command argument must eval to an integer. Got: %s" %
65
+ step_str,
66
+ :min_value => 1
67
+ }
68
+ step_count = @proc.get_an_int(step_str, count_opts)
69
+ return unless step_count
70
+ end
71
+ ## @proc.state.context.step(step_count, force)
72
+ @proc.context.step(step_count, opts[:different_pos])
73
+ @proc.state.proceed
74
+ @proc.leave_cmd_loop = true
75
+ end
76
+ end
77
+
78
+ if __FILE__ == $0
79
+ require_relative '../mock'
80
+ dbgr, cmd = MockDebugger::setup
81
+ end
@@ -0,0 +1,19 @@
1
+ require 'rubygems'; require 'require_relative'
2
+ require_relative './base/cmd'
3
+ require_relative 'break'
4
+
5
+ class Trepan::Command::SetTempBreakpointCommand <
6
+ Trepan::Command::BreakCommand
7
+ ALIASES = []
8
+ CATEGORY = 'breakpoints'
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ HELP = <<-HELP
11
+ Same as break, but the breakpoint is deleted when it is hit.
12
+ See also "break".
13
+ HELP
14
+ SHORT_HELP = 'Set a temporary breakpoint'
15
+
16
+ def run(args)
17
+ super args, true
18
+ end
19
+ end
@@ -0,0 +1,44 @@
1
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
2
+ require 'rubygems'; require 'require_relative'
3
+ require_relative 'base/cmd'
4
+
5
+ class Trepan::Command::UnaliasCommand < Trepan::Command
6
+
7
+ unless defined?(HELP)
8
+ HELP =
9
+ "unalias COMMAND
10
+
11
+ Remove alias for COMMAND
12
+
13
+ See also 'alias'.
14
+ "
15
+
16
+ CATEGORY = 'support'
17
+ MIN_ARGS = 1
18
+ # MAX_ARGS = 1 # Need at most this many
19
+ NAME = File.basename(__FILE__, '.rb')
20
+ NEED_STACK = true
21
+ SHORT_HELP = 'Remove an alias'
22
+ end
23
+
24
+ # Run command.
25
+ def run(args)
26
+ args[1..-1].each do |arg|
27
+ if @proc.aliases.member?(arg)
28
+ @proc.aliases.delete(arg)
29
+ msg "Alias for #{arg} removed."
30
+ else
31
+ msg "No alias found for #{arg}."
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ if __FILE__ == $0
38
+ # Demo it.
39
+ require_relative '../mock'
40
+ dbgr, cmd = MockDebugger::setup
41
+ cmd.run %w(cmd.name exit!)
42
+ cmd.run %w(cmd.name exit!)
43
+ cmd.run %w(cmd.name foo bar c)
44
+ end
@@ -0,0 +1,59 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative 'base/cmd'
5
+
6
+ # undisplay display-number...
7
+ class Trepan::Command::UndisplayCommand < Trepan::Command
8
+
9
+ unless defined?(HELP)
10
+ NAME = File.basename(__FILE__, '.rb')
11
+ HELP = <<EOH
12
+ undisplay DISPLAY_NUMBER ...
13
+ Cancel some expressions to be displayed when program stops.
14
+ Arguments are the code numbers of the expressions to stop displaying.
15
+ No argument means cancel all automatic-display expressions.
16
+ "delete display" has the same effect as this command.
17
+ Do "info display" to see current list of code numbers.
18
+ EOH
19
+
20
+ ALIASES = %w(und)
21
+ CATEGORY = 'data'
22
+ NEED_STACK = false
23
+ SHORT_HELP = 'Cancel some expressions to be displayed when program stops'
24
+ end
25
+
26
+ def run(args)
27
+
28
+ if args.size == 1
29
+ @proc.displays.clear
30
+ return
31
+ end
32
+ opts = {}
33
+ args[1..-1].each do |arg|
34
+ opts[:msg_on_error] = '%s must be a display number' % arg
35
+ i = @proc.get_an_int(arg, opts)
36
+ if i
37
+ unless @proc.displays.delete_index(i)
38
+ errmsg("no display number %d." % i)
39
+ return
40
+ end
41
+ end
42
+ return false
43
+ end
44
+ end
45
+ end
46
+
47
+ if __FILE__ == $0
48
+ # demo it.
49
+ require_relative '../mock'
50
+ dbgr, cmd = MockDebugger::setup
51
+
52
+ def run_cmd(cmd, args)
53
+ cmd.run(args)
54
+ puts '==' * 10
55
+ end
56
+
57
+ run_cmd(cmd, %W(#{cmd.name} z))
58
+ run_cmd(cmd, %W(#{cmd.name} 1 10))
59
+ end
@@ -0,0 +1,72 @@
1
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
2
+ require 'rubygems'; require 'require_relative'
3
+ require_relative 'base/cmd'
4
+
5
+ # up command. Like 'down' butthe direction (set by DIRECTION) is different.
6
+ #
7
+ # NOTE: The down command subclasses this, so beware when changing!
8
+ class Trepan::Command::UpCommand < Trepan::Command
9
+
10
+ # Silence already initialized constant .. warnings
11
+ old_verbose = $VERBOSE
12
+ $VERBOSE = nil
13
+ NAME = File.basename(__FILE__, '.rb')
14
+ HELP = <<-HELP
15
+ #{NAME} [count]
16
+
17
+ Move the current frame up in the stack trace (to an older frame). 0 is
18
+ the most recent frame. If no count is given, move up 1.
19
+
20
+ See also 'down' and 'frame'.
21
+ HELP
22
+
23
+ ALIASES = %w(u)
24
+ CATEGORY = 'stack'
25
+ MAX_ARGS = 1 # Need at most this many
26
+ NEED_STACK = true
27
+ SHORT_HELP = 'Move frame in the direction of the caller of the last-selected frame'
28
+ $VERBOSE = old_verbose
29
+
30
+ def complete(prefix)
31
+ @proc.frame_complete(prefix, @direction)
32
+ end
33
+
34
+ def initialize(proc)
35
+ super
36
+ @direction = +1 # -1 for down.
37
+ end
38
+
39
+ # Run 'up' command.
40
+ def run(args)
41
+
42
+ # FIXME: move into @proc and test based on NEED_STACK.
43
+ if @proc.stack_size == 0
44
+ errmsg('No frames recorded.')
45
+ return false
46
+ end
47
+
48
+ if args.size == 1
49
+ # Form is: "up" which means "up 1"
50
+ count = 1
51
+ else
52
+ count_str = args[1]
53
+ name_or_id = args[1]
54
+ low, high = @proc.frame_low_high(@direction)
55
+ opts = {
56
+ :msg_on_error =>
57
+ "The '#{NAME}' command argument must eval to an integer. Got: %s" % count_str,
58
+ :min_value => low, :max_value => high
59
+ }
60
+ count = @proc.get_an_int(count_str, opts)
61
+ return false unless count
62
+ end
63
+ @proc.adjust_frame(@direction * count, false)
64
+ end
65
+ end
66
+
67
+ if __FILE__ == $0
68
+ # Demo it.
69
+ require_relative '../mock'
70
+ dbgr, cmd = MockDebugger::setup
71
+ cmd.run [cmd.name]
72
+ end