rbx-trepanning 0.0.1-universal-rubinius

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 (205) hide show
  1. data/ChangeLog +376 -0
  2. data/LICENSE +25 -0
  3. data/NEWS +2 -0
  4. data/README.textile +28 -0
  5. data/Rakefile +165 -0
  6. data/THANKS +14 -0
  7. data/app/breakpoint.rb +218 -0
  8. data/app/breakpoint.rbc +3564 -0
  9. data/app/brkptmgr.rb +138 -0
  10. data/app/brkptmgr.rbc +2827 -0
  11. data/app/default.rb +61 -0
  12. data/app/default.rbc +1011 -0
  13. data/app/display.rb +35 -0
  14. data/app/display.rbc +968 -0
  15. data/app/frame.rb +98 -0
  16. data/app/frame.rbc +1808 -0
  17. data/app/irb.rb +112 -0
  18. data/app/irb.rbc +2111 -0
  19. data/app/iseq.rb +95 -0
  20. data/app/iseq.rbc +1801 -0
  21. data/app/method.rb +173 -0
  22. data/app/method.rbc +2492 -0
  23. data/app/mock.rb +13 -0
  24. data/app/mock.rbc +398 -0
  25. data/app/options.rb +123 -0
  26. data/app/options.rbc +2183 -0
  27. data/app/run.rb +86 -0
  28. data/app/run.rbc +1244 -0
  29. data/app/util.rb +49 -0
  30. data/app/util.rbc +1144 -0
  31. data/app/validate.rb +30 -0
  32. data/app/validate.rbc +676 -0
  33. data/bin/trepan.compiled.rbc +1043 -0
  34. data/bin/trepanx +63 -0
  35. data/bin/trepanx.compiled.rbc +985 -0
  36. data/interface/base_intf.rb +95 -0
  37. data/interface/base_intf.rbc +1742 -0
  38. data/interface/script.rb +104 -0
  39. data/interface/script.rbc +1642 -0
  40. data/interface/user.rb +91 -0
  41. data/interface/user.rbc +1418 -0
  42. data/io/base_io.rb +94 -0
  43. data/io/base_io.rbc +1404 -0
  44. data/io/input.rb +112 -0
  45. data/io/input.rbc +1979 -0
  46. data/io/null_output.rb +42 -0
  47. data/io/null_output.rbc +730 -0
  48. data/io/string_array.rb +156 -0
  49. data/io/string_array.rbc +2466 -0
  50. data/lib/trepanning.rb +398 -0
  51. data/lib/trepanning.rbc +6661 -0
  52. data/processor/breakpoint.rb +161 -0
  53. data/processor/command/alias.rb +55 -0
  54. data/processor/command/backtrace.rb +46 -0
  55. data/processor/command/base/cmd.rb +124 -0
  56. data/processor/command/base/subcmd.rb +213 -0
  57. data/processor/command/base/submgr.rb +179 -0
  58. data/processor/command/base/subsubcmd.rb +103 -0
  59. data/processor/command/base/subsubmgr.rb +184 -0
  60. data/processor/command/break.rb +100 -0
  61. data/processor/command/continue.rb +82 -0
  62. data/processor/command/delete.rb +30 -0
  63. data/processor/command/directory.rb +43 -0
  64. data/processor/command/disassemble.rb +103 -0
  65. data/processor/command/down.rb +54 -0
  66. data/processor/command/eval.rb +31 -0
  67. data/processor/command/exit.rb +58 -0
  68. data/processor/command/finish.rb +78 -0
  69. data/processor/command/frame.rb +89 -0
  70. data/processor/command/help.rb +146 -0
  71. data/processor/command/info.rb +28 -0
  72. data/processor/command/info_subcmd/breakpoints.rb +75 -0
  73. data/processor/command/info_subcmd/file.rb +153 -0
  74. data/processor/command/info_subcmd/method.rb +71 -0
  75. data/processor/command/info_subcmd/program.rb +59 -0
  76. data/processor/command/info_subcmd/variables.rb +40 -0
  77. data/processor/command/irb.rb +96 -0
  78. data/processor/command/kill.rb +70 -0
  79. data/processor/command/list.rb +296 -0
  80. data/processor/command/next.rb +66 -0
  81. data/processor/command/nexti.rb +59 -0
  82. data/processor/command/pr.rb +38 -0
  83. data/processor/command/ps.rb +40 -0
  84. data/processor/command/restart.rb +60 -0
  85. data/processor/command/set.rb +47 -0
  86. data/processor/command/set_subcmd/auto.rb +28 -0
  87. data/processor/command/set_subcmd/auto_subcmd/dis.rb +33 -0
  88. data/processor/command/set_subcmd/auto_subcmd/eval.rb +54 -0
  89. data/processor/command/set_subcmd/auto_subcmd/irb.rb +34 -0
  90. data/processor/command/set_subcmd/auto_subcmd/list.rb +34 -0
  91. data/processor/command/set_subcmd/basename.rb +26 -0
  92. data/processor/command/set_subcmd/debug.rb +27 -0
  93. data/processor/command/set_subcmd/debug_subcmd/dbgr.rb +36 -0
  94. data/processor/command/set_subcmd/debug_subcmd/skip.rb +23 -0
  95. data/processor/command/set_subcmd/debug_subcmd/step.rb +23 -0
  96. data/processor/command/set_subcmd/different.rb +60 -0
  97. data/processor/command/set_subcmd/hidelevel.rb +63 -0
  98. data/processor/command/set_subcmd/kernelstep.rb +61 -0
  99. data/processor/command/set_subcmd/max.rb +29 -0
  100. data/processor/command/set_subcmd/max_subcmd/list.rb +49 -0
  101. data/processor/command/set_subcmd/max_subcmd/stack.rb +50 -0
  102. data/processor/command/set_subcmd/max_subcmd/string.rb +54 -0
  103. data/processor/command/set_subcmd/max_subcmd/width.rb +49 -0
  104. data/processor/command/set_subcmd/substitute.rb +25 -0
  105. data/processor/command/set_subcmd/substitute_subcmd/path.rb +56 -0
  106. data/processor/command/set_subcmd/trace.rb +37 -0
  107. data/processor/command/set_subcmd/trace_subcmd/print.rb +57 -0
  108. data/processor/command/show.rb +27 -0
  109. data/processor/command/show_subcmd/alias.rb +43 -0
  110. data/processor/command/show_subcmd/args.rb +26 -0
  111. data/processor/command/show_subcmd/auto.rb +28 -0
  112. data/processor/command/show_subcmd/auto_subcmd/dis.rb +37 -0
  113. data/processor/command/show_subcmd/auto_subcmd/eval.rb +28 -0
  114. data/processor/command/show_subcmd/auto_subcmd/irb.rb +23 -0
  115. data/processor/command/show_subcmd/auto_subcmd/list.rb +22 -0
  116. data/processor/command/show_subcmd/basename.rb +22 -0
  117. data/processor/command/show_subcmd/debug.rb +27 -0
  118. data/processor/command/show_subcmd/debug_subcmd/dbgr.rb +21 -0
  119. data/processor/command/show_subcmd/debug_subcmd/skip.rb +22 -0
  120. data/processor/command/show_subcmd/debug_subcmd/step.rb +22 -0
  121. data/processor/command/show_subcmd/different.rb +27 -0
  122. data/processor/command/show_subcmd/hidelevel.rb +42 -0
  123. data/processor/command/show_subcmd/kernelstep.rb +37 -0
  124. data/processor/command/show_subcmd/max.rb +30 -0
  125. data/processor/command/show_subcmd/max_subcmd/list.rb +38 -0
  126. data/processor/command/show_subcmd/max_subcmd/stack.rb +36 -0
  127. data/processor/command/show_subcmd/max_subcmd/string.rb +42 -0
  128. data/processor/command/show_subcmd/max_subcmd/width.rb +37 -0
  129. data/processor/command/show_subcmd/trace.rb +29 -0
  130. data/processor/command/show_subcmd/trace_subcmd/print.rb +38 -0
  131. data/processor/command/source.rb +83 -0
  132. data/processor/command/step.rb +41 -0
  133. data/processor/command/tbreak.rb +19 -0
  134. data/processor/command/unalias.rb +44 -0
  135. data/processor/command/up.rb +87 -0
  136. data/processor/default.rb +56 -0
  137. data/processor/disassemble.rb +32 -0
  138. data/processor/eval.rb +96 -0
  139. data/processor/frame.rb +211 -0
  140. data/processor/help.rb +72 -0
  141. data/processor/hook.rb +133 -0
  142. data/processor/load_cmds.rb +101 -0
  143. data/processor/location.rb +128 -0
  144. data/processor/main.rb +394 -0
  145. data/processor/mock.rb +137 -0
  146. data/processor/msg.rb +28 -0
  147. data/processor/running.rb +230 -0
  148. data/processor/stepping.rb +115 -0
  149. data/processor/subcmd.rb +160 -0
  150. data/processor/validate.rb +355 -0
  151. data/test/data/enable.right +36 -0
  152. data/test/data/fname-with-blank.cmd +6 -0
  153. data/test/data/fname-with-blank.right +1 -0
  154. data/test/data/quit-Xdebug.right +3 -0
  155. data/test/data/quit.cmd +5 -0
  156. data/test/data/quit.right +0 -0
  157. data/test/example/fname with blank.rb +1 -0
  158. data/test/example/gcd-xx.rb +18 -0
  159. data/test/example/gcd.rb +19 -0
  160. data/test/example/gcd1.rb +24 -0
  161. data/test/example/null.rb +1 -0
  162. data/test/example/thread1.rb +3 -0
  163. data/test/functional/fn_helper.rb +112 -0
  164. data/test/functional/test-break-name.rb +52 -0
  165. data/test/functional/test-break.rb +51 -0
  166. data/test/functional/test-finish.rb +70 -0
  167. data/test/functional/test-fn_helper.rb +43 -0
  168. data/test/functional/test-list.rb +55 -0
  169. data/test/functional/test-next-bug.rb +49 -0
  170. data/test/functional/test-next.rb +101 -0
  171. data/test/functional/test-step.rb +272 -0
  172. data/test/functional/test-step2.rb +35 -0
  173. data/test/functional/test-tbreak.rb +41 -0
  174. data/test/integration/file-diff.rb +89 -0
  175. data/test/integration/helper.rb +78 -0
  176. data/test/integration/test-fname-with-blank.rb +12 -0
  177. data/test/integration/test-quit.rb +25 -0
  178. data/test/unit/cmd-helper.rb +46 -0
  179. data/test/unit/test-app-brkpt.rb +30 -0
  180. data/test/unit/test-app-brkptmgr.rb +51 -0
  181. data/test/unit/test-app-iseq.rb +49 -0
  182. data/test/unit/test-app-method.rb +54 -0
  183. data/test/unit/test-app-options.rb +61 -0
  184. data/test/unit/test-app-run.rb +16 -0
  185. data/test/unit/test-app-util.rb +28 -0
  186. data/test/unit/test-app-validate.rb +18 -0
  187. data/test/unit/test-base-subcmd.rb +61 -0
  188. data/test/unit/test-bin-trepanx.rb +48 -0
  189. data/test/unit/test-cmd-alias.rb +49 -0
  190. data/test/unit/test-cmd-break.rb +23 -0
  191. data/test/unit/test-cmd-exit.rb +27 -0
  192. data/test/unit/test-cmd-help.rb +101 -0
  193. data/test/unit/test-cmd-kill.rb +48 -0
  194. data/test/unit/test-intf-user.rb +46 -0
  195. data/test/unit/test-io-input.rb +27 -0
  196. data/test/unit/test-proc-eval.rb +37 -0
  197. data/test/unit/test-proc-frame.rb +79 -0
  198. data/test/unit/test-proc-help.rb +16 -0
  199. data/test/unit/test-proc-hook.rb +30 -0
  200. data/test/unit/test-proc-load_cmds.rb +41 -0
  201. data/test/unit/test-proc-location.rb +48 -0
  202. data/test/unit/test-proc-main.rb +96 -0
  203. data/test/unit/test-proc-validate.rb +91 -0
  204. data/test/unit/test-subcmd-help.rb +51 -0
  205. metadata +337 -0
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative '../base/subsubcmd'
5
+ require_relative '../base/subsubmgr'
6
+
7
+ class Trepan::SubSubcommand::ShowMax < Trepan::SubSubcommandMgr
8
+ unless defined?(HELP)
9
+ HELP = 'Show "maximum length" settings'
10
+ NAME = File.basename(__FILE__, '.rb')
11
+ PREFIX = %W(show #{NAME})
12
+ end
13
+
14
+ def run(args)
15
+ super
16
+ end
17
+ end
18
+
19
+ if __FILE__ == $0
20
+ require_relative '../../mock'
21
+ cmd_ary = Trepan::SubSubcommand::ShowMax::PREFIX
22
+ dbgr, parent_cmd = MockDebugger::setup(cmd_ary[0], false)
23
+ cmd = Trepan::SubSubcommand::ShowMax.new(dbgr.processor,
24
+ parent_cmd)
25
+ cmd_name = cmd_ary.join('')
26
+ prefix_run = cmd_ary[1..-1]
27
+ cmd.run(prefix_run)
28
+ # # require_relative '../../../lib/trepanning'
29
+ # # Trepan.debug(:set_restart => true)
30
+ end
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative '../../base/subsubcmd'
5
+
6
+ class Trepan::SubSubcommand::ShowMaxList < Trepan::ShowIntSubSubcommand
7
+ unless defined?(HELP)
8
+ HELP = 'Show the number of source file lines to list'
9
+ MIN_ABBREV = 'lis'.size
10
+ NAME = File.basename(__FILE__, '.rb')
11
+ PREFIX = %w(show max list)
12
+ end
13
+
14
+ end
15
+
16
+ if __FILE__ == $0
17
+ # Demo it.
18
+ require_relative '../../../mock'
19
+
20
+ # FIXME: DRY the below code
21
+ cmd_ary = Trepan::SubSubcommand::ShowMaxList::PREFIX
22
+ dbgr, parent_cmd = MockDebugger::setup(cmd_ary[0], false)
23
+ cmd = Trepan::SubSubcommand::ShowMax.new(dbgr.processor,
24
+ parent_cmd)
25
+ cmd_name = cmd_ary.join('')
26
+ subcmd = Trepan::SubSubcommand::ShowMaxList.new(parent_cmd.proc,
27
+ cmd,
28
+ cmd.name)
29
+ prefix_run = cmd_ary[1..-1]
30
+ subcmd.run(prefix_run)
31
+
32
+ # require_relative '../../../../lib/trepanning'
33
+ # dbgr = Trepan.new(:set_restart => true)
34
+ # dbgr.debugger
35
+ puts subcmd.summary_help(cmd.name)
36
+ puts
37
+ puts '-' * 20
38
+ end
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative '../../base/subsubcmd'
5
+
6
+ class Trepan::SubSubcommand::ShowMaxStack < Trepan::ShowIntSubSubcommand
7
+ unless defined?(HELP)
8
+ HELP = 'Show the number of backtrace lines the debugger will show'
9
+ MIN_ABBREV = 'sta'.size
10
+ NAME = File.basename(__FILE__, '.rb')
11
+ PREFIX = %w(show max stack)
12
+ end
13
+
14
+ end
15
+
16
+ if __FILE__ == $0
17
+ # Demo it.
18
+ require_relative '../../../mock'
19
+
20
+ # FIXME: DRY the below code
21
+ dbgr, show_cmd = MockDebugger::setup('show')
22
+ testcmdMgr = Trepan::Subcmd.new(show_cmd)
23
+ # max_cmd = Trepan::SubSubcommand::ShowMax.new(dbgr.core.processor,
24
+ # show_cmd)
25
+
26
+ # cmd_name = Trepan::SubSubcommand::ShowMaxStack::PREFIX.join('')
27
+ # maxx_cmd = Trepan::SubSubcommand::ShowMaxStack.new(show_cmd.proc,
28
+ # max_cmd,
29
+ # cmd_name)
30
+ # # require_relative '../../../../lib/trepanning'
31
+ # # dbgr = Trepan.new(:set_restart => true)
32
+ # # dbgr.debugger
33
+ puts max_cmd.summary_help(maxx_cmd)
34
+ puts
35
+ # maxx_cmd.run([])
36
+ end
@@ -0,0 +1,42 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative '../../base/subsubcmd'
5
+
6
+ class Trepan::SubSubcommand::ShowMaxString < Trepan::ShowIntSubSubcommand
7
+ unless defined?(HELP)
8
+ HELP = 'Show the number of characters in a string before truncating.
9
+
10
+ Sometimes the string representation of an object is very long. This
11
+ setting limits how much of the string representation you want to
12
+ see. However if the string has an embedded newline then we will assume
13
+ the output is intended to be formated as.'
14
+ MIN_ABBREV = 'st'.size
15
+ NAME = File.basename(__FILE__, '.rb')
16
+ PREFIX = %w(show max string)
17
+ end
18
+
19
+ end
20
+
21
+ if __FILE__ == $0
22
+ # Demo it.
23
+ require_relative '../../../mock'
24
+
25
+ # FIXME: DRY the below code
26
+ dbgr, show_cmd = MockDebugger::setup('show')
27
+ testcmdMgr = Trepan::Subcmd.new(show_cmd)
28
+ # max_cmd = Trepan::SubSubcommand::ShowMax.new(dbgr.core.processor,
29
+ # show_cmd)
30
+
31
+ # cmd_name = Trepan::SubSubcommand::ShowMaxString::PREFIX.join('')
32
+ # maxx_cmd = Trepan::SubSubcommand::ShowMaxString.new(show_cmd.proc,
33
+ # max_cmd,
34
+ # cmd_name)
35
+
36
+ # # require_relative '../../../../lib/trepanning'
37
+ # # dbgr = Trepan.new(:set_restart => true)
38
+ # # dbgr.debugger
39
+ puts max_cmd.summary_help(maxx_cmd)
40
+ puts
41
+ maxx_cmd.run([])
42
+ end
@@ -0,0 +1,37 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative '../../base/subsubcmd'
5
+
6
+ class Trepan::SubSubcommand::ShowMaxWidth < Trepan::ShowIntSubSubcommand
7
+ unless defined?(HELP)
8
+ HELP = 'Show the number of characters the debugger thinks are in a line.'
9
+ MIN_ABBREV = 'wid'.size
10
+ NAME = File.basename(__FILE__, '.rb')
11
+ PREFIX = %w(show max width)
12
+ end
13
+
14
+ end
15
+
16
+ if __FILE__ == $0
17
+ # Demo it.
18
+ require_relative '../../../mock'
19
+
20
+ # FIXME: DRY the below code
21
+ dbgr, show_cmd = MockDebugger::setup('show')
22
+ testcmdMgr = Trepan::Subcmd.new(show_cmd)
23
+ # max_cmd = Trepan::SubSubcommand::ShowMax.new(dbgr.core.processor,
24
+ # show_cmd)
25
+ # cmd_name = Trepan::SubSubcommand::ShowMaxWidth::PREFIX.join('')
26
+ # maxx_cmd = Trepan::SubSubcommand::ShowMaxWidth.new(show_cmd.proc,
27
+ # max_cmd,
28
+ # cmd_name)
29
+
30
+ name = File.basename(__FILE__, '.rb')
31
+ # require_relative '../../../../lib/trepanning'
32
+ # dbgr = Trepan.new(:set_restart => true)
33
+ # dbgr.debugger
34
+ # puts max_cmd.summary_help(maxx_cmd)
35
+ # puts
36
+ # maxx_cmd.run([])
37
+ end
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require 'rubygems'; require 'require_relative'
4
+ require_relative '../base/subsubcmd'
5
+ require_relative '../base/subsubmgr'
6
+
7
+ class Trepan::SubSubcommand::ShowTrace < Trepan::SubSubcommandMgr
8
+
9
+ unless defined?(HELP)
10
+ HELP = "Show event tracing printing"
11
+ NAME = File.basename(__FILE__, '.rb')
12
+ PREFIX = %W(show #{NAME})
13
+ MIN_ABBREV = 'tr'.size
14
+ SHORT_HELP = HELP
15
+ end
16
+ end
17
+
18
+ if __FILE__ == $0
19
+ # Demo it.
20
+ require_relative '../../mock'
21
+ dbgr, cmd = MockDebugger::setup('set', false)
22
+ parent_cmd = cmds['show']
23
+ command = Trepan::SubSubcommand::ShowTrace.new(dbgr.processor,
24
+ parent_cmd)
25
+
26
+ name = File.basename(__FILE__, '.rb')
27
+ cmd_args = ['show', name]
28
+ command.run(cmd_args)
29
+ end
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../../base/subsubcmd'
4
+
5
+ class Trepan::SubSubcommand::ShowTracePrint < Trepan::ShowBoolSubSubcommand
6
+ unless defined?(HELP)
7
+ HELP = "Show tracing print status"
8
+ MIN_ABBREV = 'p'.size
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ PREFIX = %w(show trace buffer)
11
+ SHORT_HELP = "Show tracing print status"
12
+ end
13
+
14
+ end
15
+
16
+ if __FILE__ == $0
17
+ # Demo it.
18
+ require_relative '../../../mock'
19
+ require_relative '../../../subcmd'
20
+ name = File.basename(__FILE__, '.rb')
21
+
22
+ # FIXME: DRY the below code
23
+ dbgr, show_cmd = MockDebugger::setup('show')
24
+ testcmdMgr = Trepan::Subcmd.new(show_cmd)
25
+ trace_cmd = Trepan::SubSubcommand::ShowTrace.new(dbgr.core.processor,
26
+ show_cmd)
27
+
28
+ # FIXME: remove the 'join' below
29
+ cmd_name = Trepan::SubSubcommand::ShowTracePrint::PREFIX.join('')
30
+ tb_cmd = Trepan::SubSubcommand::ShowTracePrint.new(show_cmd.proc,
31
+ trace_cmd,
32
+ cmd_name)
33
+ # require_relative '../../../../lib/trepanning'
34
+ # dbgr = Trepan.new(:set_restart => true)
35
+ # dbgr.debugger
36
+ tb_cmd.run([])
37
+
38
+ end
@@ -0,0 +1,83 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+
4
+ # Our local modules
5
+ require 'rubygems'; require 'require_relative'
6
+ require_relative 'base/cmd'
7
+ require_relative '../../interface/script'
8
+ require_relative '../../io/null_output'
9
+ # Mfile = import_relative('file', '...lib', 'pydbgr')
10
+
11
+ class Trepan::Command::SourceCommand < Trepan::Command
12
+ unless defined?(HELP)
13
+ NAME = File.basename(__FILE__, '.rb')
14
+ HELP = <<-HELP
15
+ #{NAME} [-v][-Y|-N][-c][-q] FILE
16
+
17
+ Read debugger commands from a file named FILE. Optional -v switch
18
+ (before the filename) causes each command in FILE to be echoed as it
19
+ is executed. Option -Y sets the default value in any confirmation
20
+ command to be 'yes' and -N sets the default value to 'no'.
21
+
22
+ Option -q will turn off any debugger output that normally occurs in the
23
+ running of the program.
24
+
25
+ Note that the command startup file '.trepanx' is read automatically
26
+ via a source command the debugger is started.
27
+
28
+ An error in any command terminates execution of the command file
29
+ unless option -c is given.
30
+ HELP
31
+ CATEGORY = 'support'
32
+ MIN_ARGS = 1 # Need at least this many
33
+ MAX_ARGS = nil
34
+ SHORT_HELP = 'Read and run debugger commands from a file'
35
+ end
36
+
37
+ def run(args)
38
+ verbose = false
39
+ parms = args[1..-1]
40
+ opts = {}
41
+ intf = @proc.dbgr.intf
42
+ output = intf[-1].output
43
+ parms.each do |arg|
44
+ case arg
45
+ when '-v'
46
+ opts[:verbose] = true
47
+ when '-Y'
48
+ opts[:confirm_val] = true
49
+ when '-N'
50
+ opts[:confirm_val] = false
51
+ when '-c'
52
+ opts[:abort_on_error] = false
53
+ when '-q'
54
+ output = Trepan::OutputNull.new(nil)
55
+ end
56
+ end
57
+
58
+ filename = args[-1]
59
+
60
+ expanded_file = File.expand_path(filename)
61
+ unless File.readable?(expanded_file)
62
+ errmsg("Debugger command file '%s' is not a readable file" % filename)
63
+ return false
64
+ end
65
+
66
+ # Push a new debugger interface.
67
+ script_intf = Trepan::ScriptInterface.new(expanded_file, output, opts)
68
+ intf << script_intf
69
+ return false
70
+ end
71
+ end
72
+
73
+ # Demo it
74
+ if __FILE__ == $0
75
+ require_relative '../mock'
76
+ dbgr, cmd = MockDebugger::setup
77
+ Trepan::Command::SourceCommand
78
+ puts "Args given: #{ARGV.size}"
79
+ if ARGV.size > 0
80
+ puts "running... #{cmd.name} #{ARGV}"
81
+ cmd.run([cmd.name, *ARGV])
82
+ end
83
+ end
@@ -0,0 +1,41 @@
1
+ require 'rubygems'; require 'require_relative'
2
+ require_relative 'base/cmd'
3
+ require_relative '../stepping'
4
+
5
+ class Trepan::Command::StepCommand < Trepan::Command
6
+
7
+ ALIASES = %w(s)
8
+ CATEGORY = 'running'
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ HELP = <<-HELP
11
+ Behaves like 'next', but if there is a method call on the current line,
12
+ exception is stopped in the called method.
13
+
14
+ See also 'continue', 'next' and 'nexti' commands.
15
+ HELP
16
+ NEED_RUNNING = true
17
+ SHORT_HELP = 'Step into next method call or to next line'
18
+
19
+ def run(args)
20
+ if args.size == 1
21
+ step_count = 1
22
+ else
23
+ step_str = args[1]
24
+ opts = {
25
+ :msg_on_error =>
26
+ "The #{NAME} command argument must eval to an integer. Got: %s" %
27
+ step_str,
28
+ :min_value => 1
29
+ }
30
+ step_count = @proc.get_an_int(step_str, opts)
31
+ return unless step_count
32
+ end
33
+
34
+ @proc.step('step', step_count)
35
+ end
36
+ end
37
+
38
+ if __FILE__ == $0
39
+ require_relative '../mock'
40
+ dbgr, cmd = MockDebugger::setup
41
+ 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::SetBreakpointCommand
7
+ ALIASES = %w(tb tbrk)
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
+ HELP
13
+ SHORT_HELP = 'Set a temporary breakpoint'
14
+
15
+ def run(args)
16
+ super args, true
17
+ end
18
+ end
19
+
@@ -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 n)
42
+ cmd.run %w(cmd.name n)
43
+ cmd.run %w(cmd.name foo bar c)
44
+ end
@@ -0,0 +1,87 @@
1
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
2
+ require 'rubygems'; require 'require_relative'
3
+ require '/home/rocky-rvm/.rvm/src/rbx-trepanning/processor/command/base/cmd'
4
+ require_relative 'base/cmd'
5
+
6
+ # up command. Like 'down' butthe direction (set by DIRECTION) is different.
7
+ #
8
+ # NOTE: The down command subclasses this, so beware when changing!
9
+ class Trepan::Command::UpCommand < Trepan::Command
10
+
11
+ # Silence already initialized constant .. warnings
12
+ old_verbose = $VERBOSE
13
+ $VERBOSE = nil
14
+ HELP =
15
+ "u(p) [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
+ "
22
+
23
+ ALIASES = %w(u)
24
+ CATEGORY = 'stack'
25
+ MAX_ARGS = 1 # Need at most this many
26
+ NAME = File.basename(__FILE__, '.rb')
27
+ NEED_STACK = true
28
+ SHORT_HELP = 'Move frame in the direction of the caller of the last-selected frame'
29
+ $VERBOSE = old_verbose
30
+
31
+ def initialize(proc)
32
+ super
33
+ @direction = +1 # -1 for down.
34
+ end
35
+
36
+ # Run 'up' command.
37
+ def run(args)
38
+
39
+ # FIXME: move into @proc and test based on NEED_STACK.
40
+ if @proc.stack_size == 0
41
+ errmsg('No frames recorded.')
42
+ return false
43
+ end
44
+
45
+ if args.size == 1
46
+ # Form is: "up" which means "up 1"
47
+ count = 1
48
+ else
49
+ count_str = args[1]
50
+ name_or_id = args[1]
51
+ opts = {
52
+ :msg_on_error =>
53
+ "The '#{NAME}' command argument must eval to an integer. Got: %s" % count_str,
54
+ :min_value => -@proc.stack_size,
55
+ :max_value => @proc.stack_size-1
56
+ }
57
+ count = @proc.get_an_int(count_str, opts)
58
+ return false unless count
59
+ end
60
+ @proc.adjust_frame(@direction * count, false)
61
+ end
62
+ end
63
+
64
+ if __FILE__ == $0
65
+ # Demo it.
66
+ require_relative '../mock'
67
+ dbgr, cmd = MockDebugger::setup
68
+
69
+ # def sep ; puts '=' * 40 end
70
+ # cmd.run [cmd.name]
71
+ # %w(-1 0 1 -2).each do |count|
72
+ # puts "#{cmd.name} #{count}"
73
+ # cmd.run([cmd.name, count])
74
+ # sep
75
+ # end
76
+ # def foo(cmd, cmd.name)
77
+ # puts "#{cmd.name}"
78
+ # cmd.run([cmd.name])
79
+ # sep
80
+ # %w(-2 -1).each do |count|
81
+ # puts "#{cmd.name} #{count}"
82
+ # cmd.run([cmd.name, count])
83
+ # sep
84
+ # end
85
+ # end
86
+ # foo(cmd, cmd.name)
87
+ end
@@ -0,0 +1,56 @@
1
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
2
+ require 'rubygems'; require 'require_relative'
3
+ require_relative '../app/default'
4
+ class Trepan
5
+ class CmdProcessor
6
+
7
+ DEFAULT_SETTINGS = {
8
+ :autoeval => true, # Ruby eval non-debugger commands
9
+ :autoirb => false, # Go into IRB in debugger command loop
10
+ :autolist => false, # Run 'list'
11
+
12
+ :basename => false, # Show basename of filenames only
13
+ :different => 'nostack', # stop *only* when different position?
14
+
15
+ :debugdbgr => false, # Debugging the debugger
16
+ :debugexcept => true, # Internal debugging of command exceptions
17
+ :debugmacro => false, # debugging macros
18
+ :debugskip => false, # Internal debugging of step/next skipping
19
+ :directory => # last-resort path-search for files
20
+ '$cdir:$cwd', # that are not fully qualified.
21
+
22
+ :hidestack => nil, # Fixnum. How many hidden outer
23
+ # debugger stack frames to hide?
24
+ # nil or -1 means compute value. 0
25
+ # means hide none. Less than 0 means show
26
+ # all stack entries.
27
+ :maxlist => 10, # Number of source lines to list
28
+ :maxstack => 10, # backtrace limit
29
+ :maxstring => 150, # Strings which are larger than this
30
+ # will be truncated to this length when
31
+ # printed
32
+ :maxwidth => (ENV['COLUMNS'] || '80').to_i,
33
+ :prompt => 'trepanx', # core part of prompt. Additional info like
34
+ # debug nesting and
35
+ :save_cmdfile => nil, # If set, debugger command file to be
36
+ # used on restart
37
+ :timer => false, # show elapsed time between events
38
+ :traceprint => false, # event tracing printing
39
+ :tracebuffer => false, # save events to a trace buffer.
40
+ :user_cmd_dir => File.join(Trepanning::HOME_DIR, 'tepanx', 'command'),
41
+ # User command directory
42
+
43
+ # Rubinius-specific user variables
44
+ :show_ip => false,
45
+ :show_bytecode => false,
46
+ :highlight => false
47
+
48
+ } unless defined?(DEFAULT_SETTINGS)
49
+ end
50
+ end
51
+
52
+ if __FILE__ == $0
53
+ # Show it:
54
+ require 'pp'
55
+ PP.pp(Trepan::CmdProcessor::DEFAULT_SETTINGS)
56
+ end
@@ -0,0 +1,32 @@
1
+ require 'rubygems'; require 'require_relative'
2
+ require_relative '../app/iseq'
3
+
4
+ class Trepan
5
+ class CmdProcessor
6
+
7
+ def show_bytecode(line=@frame.vm_location.line)
8
+ meth = @frame.method
9
+ start = meth.first_ip_on_line(line)
10
+ fin = meth.first_ip_on_line(line+1)
11
+
12
+ if fin == -1
13
+ fin = meth.iseq.size
14
+ end
15
+
16
+ # FIXME: Add section instead of "msg"
17
+ msg "Bytecode between #{start} and #{fin-1} for line #{line}"
18
+
19
+ iseq_decoder = Rubinius::InstructionDecoder.new(meth.iseq)
20
+ partial = iseq_decoder.decode_between(start, fin)
21
+
22
+ ip = start
23
+
24
+ partial.each do |ins|
25
+ inst = Rubinius::CompiledMethod::Instruction.new(ins, meth, ip)
26
+ prefix = Trepanning::ISeq::disasm_prefix(ip, frame.next_ip, meth)
27
+ msg "#{prefix} #{inst}"
28
+ ip += ins.size
29
+ end
30
+ end
31
+ end
32
+ end