trepanning 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (219) hide show
  1. data/ChangeLog +4422 -0
  2. data/LICENSE +23 -0
  3. data/NEWS +12 -0
  4. data/README.textile +56 -0
  5. data/Rakefile +171 -0
  6. data/app/Makefile +7 -0
  7. data/app/breakpoint.rb +157 -0
  8. data/app/brkptmgr.rb +149 -0
  9. data/app/condition.rb +22 -0
  10. data/app/core.rb +203 -0
  11. data/app/default.rb +54 -0
  12. data/app/disassemble.rb +61 -0
  13. data/app/display.rb +148 -0
  14. data/app/file.rb +135 -0
  15. data/app/frame.rb +275 -0
  16. data/app/irb.rb +112 -0
  17. data/app/mock.rb +22 -0
  18. data/app/options.rb +122 -0
  19. data/app/run.rb +95 -0
  20. data/app/thread.rb +24 -0
  21. data/app/util.rb +32 -0
  22. data/bin/trepan +63 -0
  23. data/data/custom_require.rb +44 -0
  24. data/data/irbrc +55 -0
  25. data/data/prelude.rb +38 -0
  26. data/interface/base_intf.rb +95 -0
  27. data/interface/script.rb +103 -0
  28. data/interface/user.rb +90 -0
  29. data/io/base_io.rb +92 -0
  30. data/io/input.rb +111 -0
  31. data/io/string_array.rb +155 -0
  32. data/lib/Makefile +7 -0
  33. data/lib/trepanning.rb +277 -0
  34. data/processor/breakpoint.rb +108 -0
  35. data/processor/command/alias.rb +55 -0
  36. data/processor/command/backtrace.rb +95 -0
  37. data/processor/command/base/cmd.rb +97 -0
  38. data/processor/command/base/subcmd.rb +207 -0
  39. data/processor/command/base/submgr.rb +178 -0
  40. data/processor/command/base/subsubcmd.rb +102 -0
  41. data/processor/command/base/subsubmgr.rb +182 -0
  42. data/processor/command/break.rb +85 -0
  43. data/processor/command/condition.rb +64 -0
  44. data/processor/command/continue.rb +61 -0
  45. data/processor/command/debug.rb +85 -0
  46. data/processor/command/delete.rb +54 -0
  47. data/processor/command/directory.rb +43 -0
  48. data/processor/command/disable.rb +65 -0
  49. data/processor/command/disassemble.rb +103 -0
  50. data/processor/command/display.rb +81 -0
  51. data/processor/command/down.rb +56 -0
  52. data/processor/command/enable.rb +43 -0
  53. data/processor/command/exit.rb +54 -0
  54. data/processor/command/finish.rb +81 -0
  55. data/processor/command/frame.rb +117 -0
  56. data/processor/command/help.rb +146 -0
  57. data/processor/command/info.rb +28 -0
  58. data/processor/command/info_subcmd/args.rb +56 -0
  59. data/processor/command/info_subcmd/breakpoints.rb +162 -0
  60. data/processor/command/info_subcmd/file.rb +162 -0
  61. data/processor/command/info_subcmd/frame.rb +39 -0
  62. data/processor/command/info_subcmd/iseq.rb +83 -0
  63. data/processor/command/info_subcmd/locals.rb +88 -0
  64. data/processor/command/info_subcmd/program.rb +54 -0
  65. data/processor/command/info_subcmd/registers.rb +72 -0
  66. data/processor/command/info_subcmd/registers_subcmd/dfp.rb +38 -0
  67. data/processor/command/info_subcmd/registers_subcmd/helper.rb +40 -0
  68. data/processor/command/info_subcmd/registers_subcmd/lfp.rb +54 -0
  69. data/processor/command/info_subcmd/registers_subcmd/pc.rb +44 -0
  70. data/processor/command/info_subcmd/registers_subcmd/sp.rb +75 -0
  71. data/processor/command/info_subcmd/return.rb +40 -0
  72. data/processor/command/info_subcmd/thread.rb +106 -0
  73. data/processor/command/irb.rb +106 -0
  74. data/processor/command/kill.rb +58 -0
  75. data/processor/command/list.rb +327 -0
  76. data/processor/command/macro.rb +65 -0
  77. data/processor/command/next.rb +89 -0
  78. data/processor/command/nocache.rb +33 -0
  79. data/processor/command/print.rb +37 -0
  80. data/processor/command/ps.rb +40 -0
  81. data/processor/command/quit.rb +62 -0
  82. data/processor/command/raise.rb +47 -0
  83. data/processor/command/reload.rb +28 -0
  84. data/processor/command/reload_subcmd/command.rb +34 -0
  85. data/processor/command/restart.rb +57 -0
  86. data/processor/command/save.rb +60 -0
  87. data/processor/command/set.rb +47 -0
  88. data/processor/command/set_subcmd/auto.rb +27 -0
  89. data/processor/command/set_subcmd/auto_subcmd/eval.rb +67 -0
  90. data/processor/command/set_subcmd/auto_subcmd/irb.rb +49 -0
  91. data/processor/command/set_subcmd/auto_subcmd/list.rb +51 -0
  92. data/processor/command/set_subcmd/basename.rb +39 -0
  93. data/processor/command/set_subcmd/debug.rb +27 -0
  94. data/processor/command/set_subcmd/debug_subcmd/dbgr.rb +49 -0
  95. data/processor/command/set_subcmd/debug_subcmd/except.rb +35 -0
  96. data/processor/command/set_subcmd/debug_subcmd/macro.rb +35 -0
  97. data/processor/command/set_subcmd/debug_subcmd/skip.rb +35 -0
  98. data/processor/command/set_subcmd/debug_subcmd/stack.rb +45 -0
  99. data/processor/command/set_subcmd/different.rb +67 -0
  100. data/processor/command/set_subcmd/events.rb +71 -0
  101. data/processor/command/set_subcmd/max.rb +35 -0
  102. data/processor/command/set_subcmd/max_subcmd/list.rb +50 -0
  103. data/processor/command/set_subcmd/max_subcmd/stack.rb +60 -0
  104. data/processor/command/set_subcmd/max_subcmd/string.rb +53 -0
  105. data/processor/command/set_subcmd/max_subcmd/width.rb +50 -0
  106. data/processor/command/set_subcmd/return.rb +66 -0
  107. data/processor/command/set_subcmd/sp.rb +62 -0
  108. data/processor/command/set_subcmd/substitute.rb +25 -0
  109. data/processor/command/set_subcmd/substitute_subcmd/eval.rb +98 -0
  110. data/processor/command/set_subcmd/substitute_subcmd/path.rb +55 -0
  111. data/processor/command/set_subcmd/substitute_subcmd/string.rb +72 -0
  112. data/processor/command/set_subcmd/timer.rb +68 -0
  113. data/processor/command/set_subcmd/trace.rb +43 -0
  114. data/processor/command/set_subcmd/trace_subcmd/buffer.rb +56 -0
  115. data/processor/command/set_subcmd/trace_subcmd/print.rb +54 -0
  116. data/processor/command/set_subcmd/trace_subcmd/var.rb +61 -0
  117. data/processor/command/show.rb +27 -0
  118. data/processor/command/show_subcmd/alias.rb +50 -0
  119. data/processor/command/show_subcmd/args.rb +50 -0
  120. data/processor/command/show_subcmd/auto.rb +27 -0
  121. data/processor/command/show_subcmd/auto_subcmd/eval.rb +38 -0
  122. data/processor/command/show_subcmd/auto_subcmd/irb.rb +34 -0
  123. data/processor/command/show_subcmd/auto_subcmd/list.rb +36 -0
  124. data/processor/command/show_subcmd/basename.rb +28 -0
  125. data/processor/command/show_subcmd/debug.rb +27 -0
  126. data/processor/command/show_subcmd/debug_subcmd/dbgr.rb +31 -0
  127. data/processor/command/show_subcmd/debug_subcmd/except.rb +33 -0
  128. data/processor/command/show_subcmd/debug_subcmd/macro.rb +32 -0
  129. data/processor/command/show_subcmd/debug_subcmd/skip.rb +33 -0
  130. data/processor/command/show_subcmd/debug_subcmd/stack.rb +32 -0
  131. data/processor/command/show_subcmd/different.rb +37 -0
  132. data/processor/command/show_subcmd/events.rb +40 -0
  133. data/processor/command/show_subcmd/macro.rb +45 -0
  134. data/processor/command/show_subcmd/max.rb +31 -0
  135. data/processor/command/show_subcmd/max_subcmd/list.rb +39 -0
  136. data/processor/command/show_subcmd/max_subcmd/stack.rb +35 -0
  137. data/processor/command/show_subcmd/max_subcmd/string.rb +41 -0
  138. data/processor/command/show_subcmd/max_subcmd/width.rb +36 -0
  139. data/processor/command/show_subcmd/trace.rb +29 -0
  140. data/processor/command/show_subcmd/trace_subcmd/buffer.rb +84 -0
  141. data/processor/command/show_subcmd/trace_subcmd/print.rb +38 -0
  142. data/processor/command/source.rb +74 -0
  143. data/processor/command/step.rb +139 -0
  144. data/processor/command/stepi.rb +63 -0
  145. data/processor/command/unalias.rb +44 -0
  146. data/processor/command/undisplay.rb +63 -0
  147. data/processor/command/up.rb +92 -0
  148. data/processor/default.rb +45 -0
  149. data/processor/display.rb +17 -0
  150. data/processor/eval.rb +88 -0
  151. data/processor/eventbuf.rb +131 -0
  152. data/processor/frame.rb +230 -0
  153. data/processor/help.rb +72 -0
  154. data/processor/hook.rb +128 -0
  155. data/processor/load_cmds.rb +102 -0
  156. data/processor/location.rb +126 -0
  157. data/processor/main.rb +364 -0
  158. data/processor/mock.rb +100 -0
  159. data/processor/msg.rb +26 -0
  160. data/processor/running.rb +170 -0
  161. data/processor/subcmd.rb +159 -0
  162. data/processor/validate.rb +395 -0
  163. data/test/example/fname with blank.rb +1 -0
  164. data/test/example/gcd-xx.rb +18 -0
  165. data/test/example/gcd.rb +19 -0
  166. data/test/example/gcd1.rb +24 -0
  167. data/test/example/null.rb +1 -0
  168. data/test/example/thread1.rb +3 -0
  169. data/test/functional/fn_helper.rb +119 -0
  170. data/test/functional/test-break.rb +87 -0
  171. data/test/functional/test-condition.rb +59 -0
  172. data/test/functional/test-debugger-call-bug.rb +31 -0
  173. data/test/functional/test-delete.rb +71 -0
  174. data/test/functional/test-finish.rb +44 -0
  175. data/test/functional/test-immediate-step-bug.rb +35 -0
  176. data/test/functional/test-next.rb +77 -0
  177. data/test/functional/test-raise.rb +73 -0
  178. data/test/functional/test-return.rb +100 -0
  179. data/test/functional/test-step.rb +274 -0
  180. data/test/functional/test-stepbug.rb +40 -0
  181. data/test/functional/test-trace-var.rb +40 -0
  182. data/test/functional/tmp/b1.rb +5 -0
  183. data/test/functional/tmp/s1.rb +9 -0
  184. data/test/functional/tmp/t2.rb +6 -0
  185. data/test/integration/file-diff.rb +88 -0
  186. data/test/integration/helper.rb +52 -0
  187. data/test/integration/test-fname-with-blank.rb +11 -0
  188. data/test/integration/test-quit.rb +11 -0
  189. data/test/integration/try-test-enable.rb +11 -0
  190. data/test/unit/cmd-helper.rb +44 -0
  191. data/test/unit/test-app-brkpt.rb +30 -0
  192. data/test/unit/test-app-brkptmgr.rb +56 -0
  193. data/test/unit/test-app-disassemble.rb +60 -0
  194. data/test/unit/test-app-file.rb +46 -0
  195. data/test/unit/test-app-frame.rb +49 -0
  196. data/test/unit/test-app-options.rb +60 -0
  197. data/test/unit/test-app-run.rb +19 -0
  198. data/test/unit/test-app-thread.rb +25 -0
  199. data/test/unit/test-app-util.rb +17 -0
  200. data/test/unit/test-base-subcmd.rb +59 -0
  201. data/test/unit/test-bin-trepan.rb +48 -0
  202. data/test/unit/test-cmd-alias.rb +50 -0
  203. data/test/unit/test-cmd-break.rb +80 -0
  204. data/test/unit/test-cmd-endisable.rb +59 -0
  205. data/test/unit/test-cmd-help.rb +100 -0
  206. data/test/unit/test-cmd-kill.rb +47 -0
  207. data/test/unit/test-cmd-quit.rb +26 -0
  208. data/test/unit/test-cmd-step.rb +45 -0
  209. data/test/unit/test-intf-user.rb +45 -0
  210. data/test/unit/test-io-input.rb +26 -0
  211. data/test/unit/test-proc-eval.rb +26 -0
  212. data/test/unit/test-proc-frame.rb +77 -0
  213. data/test/unit/test-proc-help.rb +15 -0
  214. data/test/unit/test-proc-hook.rb +29 -0
  215. data/test/unit/test-proc-load_cmds.rb +40 -0
  216. data/test/unit/test-proc-main.rb +99 -0
  217. data/test/unit/test-proc-validate.rb +90 -0
  218. data/test/unit/test-subcmd-help.rb +48 -0
  219. metadata +358 -0
@@ -0,0 +1,28 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative 'base/submgr'
4
+
5
+ class Trepan::Command::ReloadCommand < Trepan::SubcommandMgr
6
+ ALIASES = %w(rel)
7
+ HELP = 'Reload information'
8
+ CATEGORY = 'data'
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ NEED_STACK = false
11
+ SHORT_HELP = 'Reload information'
12
+ def initialize(proc)
13
+ super
14
+ end
15
+
16
+ end
17
+
18
+ if __FILE__ == $0
19
+ require_relative '../mock'
20
+ name = File.basename(__FILE__, '.rb')
21
+ dbgr, cmd = MockDebugger::setup(name)
22
+
23
+ # require 'trepanning'
24
+ # Trepan.debug(:set_restart => true)
25
+ xx = Trepan::Command::ReloadCommand.new(cmd)
26
+ cmd.run([name])
27
+ cmd.run([name, 'command'])
28
+ end
@@ -0,0 +1,34 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../base/subcmd'
4
+
5
+ class Trepan::Subcommand::ReloadCommand < Trepan::Subcommand
6
+ unless defined?(HELP)
7
+ HELP = 'Reload debugger commmands from debugger directories'
8
+ MIN_ABBREV = 'co'.size # Note we have "info file"
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ NEED_STACK = true
11
+ PREFIX = %w(reload command)
12
+ end
13
+
14
+ def run(args)
15
+ @proc.load_cmds_initialize
16
+ msg('Debugger commands reloaded.')
17
+ end
18
+
19
+ end
20
+
21
+ if __FILE__ == $0
22
+ # Demo it.
23
+ require_relative '../../mock'
24
+ require_relative '../../subcmd'
25
+ name = File.basename(__FILE__, '.rb')
26
+
27
+ # FIXME: DRY the below code
28
+ dbgr, cmd = MockDebugger::setup('reload')
29
+ subcommand = Trepan::Subcommand::ReloadCommand.new(cmd)
30
+ testcmdMgr = Trepan::Subcmd.new(subcommand)
31
+
32
+ name = File.basename(__FILE__, '.rb')
33
+ subcommand.summary_help(name)
34
+ end
@@ -0,0 +1,57 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative 'base/cmd'
4
+ require_relative '../../app/run'
5
+ class Trepan::Command::RestartCommand < Trepan::Command
6
+
7
+ unless defined?(HELP)
8
+ ALIASES = %w(R run)
9
+ HELP =
10
+ 'restart - Restart debugger and program via an exec
11
+ call. All state is lost, and new copy of the debugger is used.'
12
+
13
+ CATEGORY = 'running'
14
+ MAX_ARGS = 0 # Need at most this many
15
+ NAME = File.basename(__FILE__, '.rb')
16
+ SHORT_HELP = '(Hard) restart of program via exec()'
17
+ end
18
+
19
+ # This method runs the command
20
+ def run(args) # :nodoc
21
+
22
+ dbgr = @proc.dbgr
23
+ argv = dbgr.restart_argv
24
+ if argv and argv.size > 0
25
+ unless File.executable?(argv[0])
26
+ msg(["File #{argv[0]} not executable.",
27
+ "Adding Ruby interpreter."])
28
+ argv.unshift Trepanning::ruby_path
29
+ end
30
+ @proc.run_cmd(%w(show args))
31
+ if not confirm('Restart (exec)?', false)
32
+ msg "Restart not confirmed"
33
+ else
34
+ msg 'Restarting...'
35
+ @proc.run_cmd(%w(save))
36
+ argv.unshift
37
+ # FIXME: Run atexit finalize routines?
38
+ Dir.chdir(dbgr.initial_dir) if dbgr.initial_dir
39
+ exec(*argv)
40
+ end
41
+ else
42
+ errmsg("No executable file and command options recorded.")
43
+ end
44
+ end
45
+ end
46
+
47
+ if __FILE__ == $0
48
+ exit if ARGV[0] == 'exit'
49
+
50
+ require_relative '../mock'
51
+ name = File.basename(__FILE__, '.rb')
52
+ dbgr, cmd = MockDebugger::setup(name)
53
+ dbgr.restart_argv = []
54
+ cmd.run([name])
55
+ dbgr.restart_argv = [File.expand_path($0), 'exit']
56
+ cmd.run([name])
57
+ end
@@ -0,0 +1,60 @@
1
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
2
+ require 'tmpdir'
3
+ require_relative 'base/cmd'
4
+ class Trepan::Command::SaveCommand < Trepan::Command
5
+
6
+ unless defined?(HELP)
7
+ HELP =
8
+ "Save settings to a file"
9
+
10
+ CATEGORY = 'running'
11
+ MAX_ARGS = 1 # Need at most this many
12
+ NAME = File.basename(__FILE__, '.rb')
13
+ SHORT_HELP = 'Send debugger state to a file'
14
+ end
15
+
16
+ # This method runs the command
17
+ def run(args) # :nodoc
18
+ save_filename =
19
+ if args.size > 1
20
+ args[1]
21
+ else
22
+ @proc.settings[:save_cmdfile] ||
23
+ File.join(Dir.tmpdir,
24
+ Dir::Tmpname.make_tmpname(['trepanning-save', '.txt'], nil))
25
+ end
26
+ begin
27
+ save_file = File.open(save_filename, 'w')
28
+ rescue => exc
29
+ errmsg("Can't open #{save_filename} for writing.")
30
+ errmsg("System reports: #{exc.inspect}")
31
+ return
32
+ end
33
+ save_file.puts "#\n# Commands to restore trepanning environment\n#\n"
34
+ @proc.commands.each do |cmd_name, cmd_obj|
35
+ cmd_obj.save_command if cmd_obj.respond_to?(:save_command)
36
+ next unless cmd_obj.is_a?(Trepan::SubcommandMgr)
37
+ cmd_obj.subcmds.subcmds.each do |subcmd_name, subcmd_obj|
38
+ save_file.puts subcmd_obj.save_command if
39
+ subcmd_obj.respond_to?(:save_command)
40
+ next unless subcmd_obj.is_a?(Trepan::SubSubcommandMgr)
41
+ subcmd_obj.subcmds.subcmds.each do |subsubcmd_name, subsubcmd_obj|
42
+ save_file.puts subsubcmd_obj.save_command if
43
+ subsubcmd_obj.respond_to?(:save_command)
44
+ end
45
+ end
46
+ end
47
+ save_file.close
48
+ msg "Debugger commands written to file: #{save_file.to_path}"
49
+ end
50
+ end
51
+
52
+ if __FILE__ == $0
53
+ require_relative '../mock'
54
+ name = File.basename(__FILE__, '.rb')
55
+ dbgr, cmd = MockDebugger::setup(name)
56
+ require 'tmpdir'
57
+ cmd.run([name, Dir.tmpdir])
58
+ cmd.run([name])
59
+ cmd.run([name, File.join(Dir.tmpdir, 'save_file.txt')])
60
+ end
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative 'base/submgr'
4
+
5
+ class Trepan::Command::SetCommand < Trepan::SubcommandMgr
6
+ unless defined?(HELP)
7
+ HELP =
8
+ 'Modifies parts of the debugger environment.
9
+
10
+ You can give unique prefix of the name of a subcommand to get
11
+ information about just that subcommand.
12
+
13
+ Type "set" for a list of "set" subcommands and what they do.
14
+ Type "help set *" for just the list of "set" subcommands.
15
+
16
+ For compatability with older ruby-debug "set auto..." is the
17
+ same as "set auto ...". For example "set autolist" is the same
18
+ as "set auto list".
19
+ '
20
+
21
+ CATEGORY = 'support'
22
+ NAME = File.basename(__FILE__, '.rb')
23
+ NEED_STACK = false
24
+ SHORT_HELP = 'Modify parts of the debugger environment'
25
+ end
26
+
27
+ def run(args)
28
+ if args.size > 1
29
+ first = args[1].downcase
30
+ alen = 'auto'.size
31
+ args[1..1] = ['auto', first[alen..-1]] if
32
+ first.start_with?('auto') && first.size > alen
33
+ end
34
+ super
35
+ end
36
+
37
+ end
38
+
39
+ if __FILE__ == $0
40
+ require_relative '../mock'
41
+ name = File.basename(__FILE__, '.rb')
42
+ dbgr, cmd = MockDebugger::setup(name)
43
+ cmd.run([name])
44
+ cmd.run([name, 'autolist'])
45
+ cmd.run([name, 'autoeval', 'off'])
46
+ cmd.run([name, 'basename'])
47
+ end
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../base/subsubcmd'
4
+ require_relative '../base/subsubmgr'
5
+
6
+ class Trepan::SubSubcommand::SetAuto < Trepan::SubSubcommandMgr
7
+ unless defined?(HELP)
8
+ HELP = 'Set controls for things with some sort of "automatic" default behavior'
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ PREFIX = %w(set auto)
11
+ end
12
+ end
13
+
14
+ if __FILE__ == $0
15
+ require_relative '../../mock'
16
+ dbgr, cmd = MockDebugger::setup('set')
17
+ cmds = dbgr.core.processor.commands
18
+ set_cmd = cmds['set']
19
+ command = Trepan::SubSubcommand::SetAuto.new(dbgr.core.processor,
20
+ set_cmd)
21
+ name = File.basename(__FILE__, '.rb')
22
+ cmd_args = ['set', name]
23
+ set_cmd.instance_variable_set('@last_args', cmd_args)
24
+ # require_relative '../../../lib/trepanning'
25
+ # Trepan.debug(:set_restart => true)
26
+ command.run(cmd_args)
27
+ end
@@ -0,0 +1,67 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../../base/subsubcmd'
4
+
5
+ class Trepan::SubSubcommand::SetAutoEval < Trepan::SetBoolSubSubcommand
6
+ unless defined?(HELP)
7
+ HELP = "Evaluate unrecognized debugger commands.
8
+
9
+ Often inside the debugger, one would like to be able to run arbitrary
10
+ Ruby commands without having to preface Python expressions with \"print\" or
11
+ \"eval\". Setting \"auto eval\" on will cause unrecognized debugger
12
+ commands to be eval'd as a Ruby expression.
13
+
14
+ Note that if this is set, on error the message shown on type a bad
15
+ debugger command changes from:
16
+
17
+ Undefined command: \"fdafds\". Try \"help\".
18
+
19
+ to something more Ruby-eval-specific such as:
20
+
21
+ NameError: name 'fdafds' is not defined
22
+
23
+ One other thing that trips people up is when setting auto eval is that
24
+ there are some short debugger commands that sometimes one wants to use
25
+ as a variable, such as in an assignment statement. For example:
26
+
27
+ s = 5
28
+
29
+ which produce when 'auto eval' is on:
30
+ *** Command 'step' can take at most 1 argument(s); got 2.
31
+
32
+ because by default, 's' is an alias for the debugger 'step'
33
+ command. It is possible to remove that alias if this causes constant
34
+ problem. Another possibility is to go into a real Ruby shell via the
35
+ 'irb' command.
36
+ "
37
+ MIN_ABBREV = 'ev'.size
38
+ NAME = File.basename(__FILE__, '.rb')
39
+ PREFIX = %w(set auto eval)
40
+ SHORT_HELP = "Set evaluation of unrecognized debugger commands"
41
+ end
42
+
43
+ end
44
+
45
+ if __FILE__ == $0
46
+ # Demo it.
47
+ require_relative '../../../mock'
48
+ name = File.basename(__FILE__, '.rb')
49
+
50
+ # FIXME: DRY the below code
51
+ dbgr, set_cmd = MockTrepan::setup('set')
52
+ auto_cmd = Trepan::SubSubcommand::SetAuto.new(dbgr.core.processor,
53
+ set_cmd)
54
+
55
+ # FIXME: remove the 'join' below
56
+ cmd_name = Trepan::SubSubcommand::SetAutoEval::PREFIX.join('')
57
+ subcmd = Trepan::SubSubcommand::SetAutoEval.new(set_cmd.proc,
58
+ auto_cmd,
59
+ cmd_name)
60
+ # require_relative '../../../../lib/trepanning'
61
+ # Trepan.debug(:set_restart => true)
62
+
63
+ subcmd.run([cmd_name])
64
+ %w(off on 0 1).each { |arg| subcmd.run([cmd_name, arg]) }
65
+ puts '-' * 10
66
+ puts subcmd.save_command.join("\n")
67
+ end
@@ -0,0 +1,49 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../../base/subsubcmd'
4
+
5
+ class Trepan::Subcommand::SetAutoIrb < Trepan::SetBoolSubSubcommand
6
+ unless defined?(HELP)
7
+ HELP = "Set to automatically go into irb each time we enter the debugger"
8
+ MIN_ABBREV = 'ir'.size
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ PREFIX = %w(set auto irb)
11
+ end
12
+
13
+ def run(args)
14
+ super
15
+ if @proc.settings[:autoirb]
16
+ @proc.cmdloop_prehooks.insert_if_new(-1, *@proc.autoirb_hook)
17
+ else
18
+ @proc.cmdloop_prehooks.delete_by_name('autoirb')
19
+ end
20
+ end
21
+
22
+ end
23
+
24
+ if __FILE__ == $0
25
+ # Demo it.
26
+ require_relative '../../../mock'
27
+ require_relative '../../../subcmd'
28
+ require_relative '../../../hook'
29
+ name = File.basename(__FILE__, '.rb')
30
+
31
+ # FIXME: DRY the below code
32
+ dbgr, set_cmd = MockTrepan::setup('set')
33
+ auto_cmd = Trepan::SubSubcommand::SetAuto.new(dbgr.core.processor,
34
+ set_cmd)
35
+ # FIXME: remove the 'join' below
36
+ cmd_name = Trepan::Subcommand::SetAutoIrb::PREFIX.join('')
37
+ autox_cmd = Trepan::SubSubcommand::SetAutoIrb.new(set_cmd.proc,
38
+ auto_cmd,
39
+ cmd_name)
40
+ # require_relative '../../../../lib/trepanning'
41
+ # dbgr = Trepan.new(:set_restart => true)
42
+ # dbgr.debugger
43
+ set_cmd.proc.hook_initialize(set_cmd.proc.commands)
44
+ subcmd_name = Trepan::Subcommand::SetAutoIrb::PREFIX[1..-1].join('')
45
+ autox_cmd.run([subcmd_name])
46
+ autox_cmd.run([subcmd_name, 'off'])
47
+ puts autox_cmd.save_command.join("\n")
48
+
49
+ end
@@ -0,0 +1,51 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../../base/subsubcmd'
4
+
5
+ class Trepan::Subcommand::SetAutoList < Trepan::SetBoolSubSubcommand
6
+ unless defined?(HELP)
7
+ HELP = "Set to run a 'list' command each time we enter the debugger"
8
+ MIN_ABBREV = 'l'.size
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ PREFIX = %w(set auto list)
11
+ SHORT_HELP = "Set running a 'list' command each time we enter the debugger"
12
+ end
13
+
14
+ def run(args)
15
+ super
16
+ if @proc.settings[:autolist]
17
+ @proc.cmdloop_prehooks.insert_if_new(10, *@proc.autolist_hook)
18
+ else
19
+ @proc.cmdloop_prehooks.delete_by_name('autolist')
20
+ end
21
+ end
22
+
23
+ end
24
+
25
+ if __FILE__ == $0
26
+ # Demo it.
27
+ require_relative '../../../mock'
28
+ require_relative '../../../subcmd'
29
+ require_relative '../../../hook'
30
+ name = File.basename(__FILE__, '.rb')
31
+
32
+ # FIXME: DRY the below code
33
+ dbgr, set_cmd = MockDebugger::setup('set')
34
+ testcmdMgr = Trepan::Subcmd.new(set_cmd)
35
+ auto_cmd = Trepan::SubSubcommand::SetAuto.new(dbgr.core.processor,
36
+ set_cmd)
37
+ # FIXME: remove the 'join' below
38
+ cmd_name = Trepan::Subcommand::SetAutoList::PREFIX.join('')
39
+ autox_cmd = Trepan::SubSubcommand::SetAutoList.new(set_cmd.proc,
40
+ auto_cmd,
41
+ cmd_name)
42
+ # require_relative '../../../../lib/trepanning'
43
+ # dbgr = Trepan.new(:set_restart => true)
44
+ # dbgr.debugger
45
+ set_cmd.proc.hook_initialize(set_cmd.proc.commands)
46
+ subcmd_name = Trepan::Subcommand::SetAutoList::PREFIX[1..-1].join('')
47
+ autox_cmd.run([subcmd_name])
48
+ autox_cmd.run([subcmd_name, 'off'])
49
+ puts '-' * 10
50
+ puts autox_cmd.save_command
51
+ end
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../base/subcmd'
4
+
5
+ class Trepan::Subcommand::SetBasename < Trepan::SetBoolSubcommand
6
+ unless defined?(HELP)
7
+ HELP = "Set to show only file basename in showing file names"
8
+ IN_LIST = true
9
+ MIN_ABBREV = 'ba'.size
10
+ NAME = File.basename(__FILE__, '.rb')
11
+ PREFIX = %w(set basename)
12
+ end
13
+
14
+ end
15
+
16
+ if __FILE__ == $0
17
+ # Demo it.
18
+ require_relative '../../mock'
19
+ name = File.basename(__FILE__, '.rb')
20
+
21
+ # FIXME: DRY the below code
22
+ dbgr, cmd = MockDebugger::setup('set')
23
+ subcommand = Trepan::Subcommand::SetBasename.new(cmd)
24
+ testcmdMgr = Trepan::Subcmd.new(subcommand)
25
+
26
+ subcommand.run_show_bool
27
+ subcommand.summary_help(name)
28
+
29
+ # require 'trepanning'
30
+ # Trepan.debug(:set_restart => true)
31
+ subcommand.run(['set', name])
32
+ subcommand.run(['set', name, 'off'])
33
+ subcommand.run(['set', name, 'on'])
34
+ subcommand.summary_help(name)
35
+ puts
36
+ puts '-' * 20
37
+ puts subcommand.save_command
38
+
39
+ end
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../base/subsubcmd'
4
+ require_relative '../base/subsubmgr'
5
+
6
+ class Trepan::SubSubcommand::SetDebug < Trepan::SubSubcommandMgr
7
+ unless defined?(HELP)
8
+ HELP = 'Set internal debugger settings'
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ PREFIX = %w(set debug)
11
+ end
12
+ end
13
+
14
+ if __FILE__ == $0
15
+ require_relative '../../mock'
16
+ dbgr = MockDebugger::MockDebugger.new
17
+ cmds = dbgr.core.processor.commands
18
+ set_cmd = cmds['set']
19
+ command = Trepan::SubSubcommand::SetAuto.new(dbgr.core.processor,
20
+ set_cmd)
21
+ name = File.basename(__FILE__, '.rb')
22
+ cmd_args = ['set', name]
23
+ set_cmd.instance_variable_set('@last_args', cmd_args)
24
+ # require_relative '../../../lib/trepanning'
25
+ # Trepan.debug(:set_restart => true)
26
+ command.run(cmd_args)
27
+ end
@@ -0,0 +1,49 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../../base/subsubcmd'
4
+
5
+ class Trepan::SubSubcommand::SetDebugDbgr < Trepan::SetBoolSubSubcommand
6
+ unless defined?(HELP)
7
+ HELP = 'set debug dbgr [on|off]
8
+
9
+ Facilitates debugging the debugger. Global variables $trepan_cmdproc
10
+ and $trepan_frame are set to the current values of @frame and self
11
+ when the command processor was entered. '
12
+
13
+ MIN_ABBREV = 'db'.size
14
+ NAME = File.basename(__FILE__, '.rb')
15
+ PREFIX = %w(set debug dbgr)
16
+ SHORT_HELP = 'Set debugging debugger'
17
+ end
18
+
19
+ def run(args)
20
+ super
21
+ @proc.cmdloop_prehooks.insert_if_new(-1, *@proc.debug_dbgr_hook)
22
+ @proc.debug_dbgr_hook[1].call
23
+ end
24
+
25
+ end
26
+
27
+ if __FILE__ == $0
28
+ # Demo it.
29
+ require_relative '../../../mock'
30
+ name = File.basename(__FILE__, '.rb')
31
+
32
+ # FIXME: DRY the below code
33
+ dbgr, dbg_cmd = MockDebugger::setup('set')
34
+ debug_cmd = Trepan::SubSubcommand::SetDebug.new(dbgr.core.processor,
35
+ dbg_cmd)
36
+ # FIXME: remove the 'join' below
37
+ cmd_name = Trepan::SubSubcommand::SetDebugDbgr::PREFIX.join('')
38
+ debugx_cmd = Trepan::SubSubcommand::SetDebugDbgr.new(dbg_cmd.proc,
39
+ debug_cmd,
40
+ cmd_name)
41
+ # require_relative '../.././../lib/trepanning'
42
+ # dbgr = Trepan.new(:set_restart => true)
43
+ # dbgr.debugger
44
+ debugx_cmd.run([name])
45
+ debugx_cmd.run([name, 'on'])
46
+ debugx_cmd.run([name, 'off'])
47
+ puts '-' * 10
48
+ puts debugx_cmd.save_command
49
+ end
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../../base/subsubcmd'
4
+
5
+ class Trepan::SubSubcommand::SetDebugExcept < Trepan::SetBoolSubSubcommand
6
+ unless defined?(HELP)
7
+ HELP = 'Set to show execution traceback on debugger command exception'
8
+ MIN_ABBREV = 'sk'.size
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ PREFIX = %w(set debug except)
11
+ end
12
+ end
13
+
14
+ if __FILE__ == $0
15
+ # Demo it.
16
+ require_relative '../../../mock'
17
+ require_relative '../../../subcmd'
18
+ name = File.basename(__FILE__, '.rb')
19
+
20
+ # FIXME: DRY the below code
21
+ dbgr, dbg_cmd = MockDebugger::setup('set')
22
+ debug_cmd = Trepan::SubSubcommand::SetDebug.new(dbgr.core.processor,
23
+ dbg_cmd)
24
+ # FIXME: remove the 'join' below
25
+ cmd_name = Trepan::SubSubcommand::SetDebugExcept::PREFIX.join('')
26
+ debugx_cmd = Trepan::SubSubcommand::SetDebugExcept.new(dbg_cmd.proc,
27
+ debug_cmd,
28
+ cmd_name)
29
+ # require_relative '../../../../lib/trepan'
30
+ # dbgr = Trepan.new(:set_restart => true)
31
+ # dbgr.debugger
32
+ debugx_cmd.run([name, 'off'])
33
+ debugx_cmd.run([name])
34
+ debugx_cmd.run([name, 'on'])
35
+ end
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../../base/subsubcmd'
4
+
5
+ class Trepan::SubSubcommand::SetDebugMacro < Trepan::SetBoolSubSubcommand
6
+ unless defined?(HELP)
7
+ HELP = "Set macro debugging"
8
+ MIN_ABBREV = 'macro'.size
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ PREFIX = %w(set debug macro)
11
+ end
12
+ end
13
+
14
+ if __FILE__ == $0
15
+ # Demo it.
16
+ require_relative '../../../mock'
17
+ require_relative '../../../subcmd'
18
+ name = File.basename(__FILE__, '.rb')
19
+
20
+ # FIXME: DRY the below code
21
+ dbgr, set_cmd = MockTrepan::setup('set')
22
+ debug_cmd = Trepan::SubSubcommand::SetDebug.new(dbgr.core.processor,
23
+ set_cmd)
24
+ # FIXME: remove the 'join' below
25
+ cmd_name = Trepan::SubSubcommand::SetDebugMacro::PREFIX.join('')
26
+ debugx_cmd = Trepan::SubSubcommand::SetDebugMacro.new(set_cmd.proc,
27
+ debug_cmd,
28
+ cmd_name)
29
+ # require_relative '../../../../lib/trepanning'
30
+ # dbgr = Trepan.new(:set_restart => true)
31
+ # dbgr.debugger
32
+ debugx_cmd.run([name])
33
+ debugx_cmd.run([name, 'off'])
34
+ debugx_cmd.run([name, 'on'])
35
+ end
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../../base/subsubcmd'
4
+
5
+ class Trepan::SubSubcommand::SetDebugSkip < Trepan::SetBoolSubSubcommand
6
+ unless defined?(HELP)
7
+ HELP = 'Set debugging of statement skip logic'
8
+ MIN_ABBREV = 'sk'.size
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ PREFIX = %w(set debug skip)
11
+ end
12
+ end
13
+
14
+ if __FILE__ == $0
15
+ # Demo it.
16
+ require_relative '../../../mock'
17
+ require_relative '../../../subcmd'
18
+ name = File.basename(__FILE__, '.rb')
19
+
20
+ # FIXME: DRY the below code
21
+ dbgr, dbg_cmd = MockDebugger::setup('set')
22
+ debug_cmd = Trepan::SubSubcommand::SetDebug.new(dbgr.core.processor,
23
+ dbg_cmd)
24
+ # FIXME: remove the 'join' below
25
+ cmd_name = Trepan::SubSubcommand::SetDebugSkip::PREFIX.join('')
26
+ debugx_cmd = Trepan::SubSubcommand::SetDebugSkip.new(dbg_cmd.proc,
27
+ debug_cmd,
28
+ cmd_name)
29
+ # require_relative '../../../../lib/trepanning'
30
+ # dbgr = Trepan.new(:set_restart => true)
31
+ # dbgr.debugger
32
+ debugx_cmd.run([name])
33
+ debugx_cmd.run([name, 'on'])
34
+ debugx_cmd.run([name, 'off'])
35
+ end