trepanning 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. data/ChangeLog +354 -0
  2. data/NEWS +21 -0
  3. data/Rakefile +27 -20
  4. data/app/cmd_parse.kpeg +20 -4
  5. data/app/cmd_parse.rb +11 -10
  6. data/app/cmd_parser.rb +119 -55
  7. data/app/complete.rb +1 -0
  8. data/app/core.rb +3 -3
  9. data/app/disassemble.rb +13 -3
  10. data/app/file.rb +2 -1
  11. data/app/frame.rb +3 -1
  12. data/app/mock.rb +3 -0
  13. data/app/options.rb +48 -31
  14. data/app/util.rb +50 -0
  15. data/interface/base_intf.rb +4 -0
  16. data/interface/client.rb +4 -0
  17. data/interface/script.rb +1 -1
  18. data/interface/server.rb +4 -0
  19. data/interface/user.rb +5 -0
  20. data/io/input.rb +3 -2
  21. data/io/null_output.rb +7 -1
  22. data/processor/breakpoint.rb +3 -2
  23. data/processor/command/base/subcmd.rb +1 -1
  24. data/processor/command/base/submgr.rb +4 -1
  25. data/processor/command/base/subsubcmd.rb +2 -2
  26. data/processor/command/base/subsubmgr.rb +1 -1
  27. data/processor/command/break.rb +7 -3
  28. data/processor/command/complete.rb +1 -0
  29. data/processor/command/continue.rb +1 -1
  30. data/processor/command/disassemble.rb +1 -1
  31. data/processor/command/edit.rb +35 -14
  32. data/processor/command/enable.rb +5 -3
  33. data/processor/command/eval.rb +35 -14
  34. data/processor/command/exit.rb +2 -0
  35. data/processor/command/help.rb +0 -9
  36. data/processor/command/help/command.txt +37 -27
  37. data/processor/command/help/examples.txt +16 -0
  38. data/processor/command/help/suffixes.txt +17 -0
  39. data/processor/command/info.rb +1 -1
  40. data/processor/command/info_subcmd/args.rb +7 -13
  41. data/processor/command/info_subcmd/breakpoints.rb +8 -2
  42. data/processor/command/info_subcmd/frame.rb +2 -0
  43. data/processor/command/info_subcmd/globals.rb +63 -0
  44. data/processor/command/info_subcmd/iseq.rb +3 -1
  45. data/processor/command/info_subcmd/locals.rb +16 -15
  46. data/processor/command/{show_subcmd → info_subcmd}/macro.rb +7 -7
  47. data/processor/command/info_subcmd/program.rb +2 -0
  48. data/processor/command/info_subcmd/registers.rb +5 -1
  49. data/processor/command/info_subcmd/registers_subcmd/dfp.rb +2 -3
  50. data/processor/command/info_subcmd/registers_subcmd/helper.rb +8 -9
  51. data/processor/command/info_subcmd/registers_subcmd/lfp.rb +10 -5
  52. data/processor/command/info_subcmd/registers_subcmd/pc.rb +9 -4
  53. data/processor/command/info_subcmd/registers_subcmd/sp.rb +4 -5
  54. data/processor/command/info_subcmd/ruby.rb +3 -1
  55. data/processor/command/info_subcmd/source.rb +78 -0
  56. data/processor/command/info_subcmd/stack.rb +23 -0
  57. data/processor/command/kill.rb +4 -6
  58. data/processor/command/list.rb +118 -120
  59. data/processor/command/macro.rb +1 -1
  60. data/processor/command/parsetree.rb +56 -0
  61. data/processor/command/pp.rb +40 -0
  62. data/processor/command/pr.rb +1 -2
  63. data/processor/command/quit.rb +2 -1
  64. data/processor/command/set_subcmd/abbrev.rb +24 -0
  65. data/processor/command/set_subcmd/auto_subcmd/eval.rb +1 -2
  66. data/processor/command/set_subcmd/auto_subcmd/irb.rb +2 -3
  67. data/processor/command/set_subcmd/auto_subcmd/list.rb +2 -3
  68. data/processor/command/set_subcmd/highlight.rb +8 -2
  69. data/processor/command/set_subcmd/reload.rb +41 -0
  70. data/processor/command/set_subcmd/timer.rb +8 -18
  71. data/processor/command/set_subcmd/trace.rb +2 -2
  72. data/processor/command/set_subcmd/trace_subcmd/buffer.rb +2 -2
  73. data/processor/command/set_subcmd/trace_subcmd/print.rb +3 -3
  74. data/processor/command/{irb.rb → shell.rb} +9 -6
  75. data/processor/command/show_subcmd/abbrev.rb +19 -0
  76. data/processor/command/show_subcmd/directories.rb +21 -0
  77. data/processor/command/show_subcmd/hidelevel.rb +1 -1
  78. data/processor/command/show_subcmd/highlight.rb +2 -1
  79. data/processor/command/show_subcmd/reload.rb +17 -0
  80. data/processor/command/show_subcmd/timer.rb +17 -0
  81. data/processor/command/show_subcmd/trace_subcmd/buffer.rb +1 -1
  82. data/processor/command/source.rb +15 -14
  83. data/processor/command/tbreak.rb +20 -0
  84. data/processor/command/watchg.rb +114 -0
  85. data/processor/default.rb +43 -41
  86. data/processor/display.rb +3 -2
  87. data/processor/eval.rb +5 -3
  88. data/processor/eventbuf.rb +3 -2
  89. data/processor/frame.rb +12 -3
  90. data/processor/hook.rb +3 -2
  91. data/processor/load_cmds.rb +186 -179
  92. data/processor/location.rb +154 -159
  93. data/processor/main.rb +44 -16
  94. data/processor/mock.rb +0 -11
  95. data/processor/msg.rb +3 -1
  96. data/processor/running.rb +3 -2
  97. data/processor/validate.rb +25 -4
  98. data/processor/virtual.rb +32 -0
  99. data/test/data/debugger-stop.right +1 -0
  100. data/test/data/fname-with-blank.right +1 -0
  101. data/test/example/gcd.rb +1 -0
  102. data/test/functional/{test-trace-var.rb → test-watchg.rb} +15 -4
  103. data/test/unit/cmd-helper.rb +0 -3
  104. data/test/unit/test-app-cmd_parser.rb +2 -2
  105. data/test/unit/test-app-file.rb +1 -0
  106. data/test/unit/test-app-frame.rb +1 -1
  107. data/test/unit/test-app-util.rb +21 -0
  108. data/test/unit/test-base-cmd.rb +4 -6
  109. data/test/unit/test-base-subcmd.rb +1 -4
  110. data/test/unit/test-base-submgr.rb +1 -2
  111. data/test/unit/test-base-subsubcmd.rb +0 -4
  112. data/test/unit/test-cmd-edit.rb +33 -0
  113. data/test/unit/test-cmd-parse_list_cmd.rb +33 -0
  114. data/test/unit/test-completion.rb +1 -1
  115. data/test/unit/test-proc-frame.rb +4 -1
  116. data/test/unit/test-proc-load_cmds.rb +2 -1
  117. data/test/unit/test-proc-location.rb +9 -26
  118. data/test/unit/test-proc-main.rb +1 -4
  119. data/test/unit/test-proc-validate.rb +28 -18
  120. data/test/unit/test-subcmd-help.rb +0 -4
  121. data/trepanning.gemspec +1 -1
  122. metadata +27 -10
  123. data/processor/command/set_subcmd/trace_subcmd/var.rb +0 -57
@@ -5,7 +5,7 @@ require_relative '../base/subsubcmd'
5
5
  class Trepan::Subcommand::ShowHidelevel < Trepan::ShowIntSubcommand
6
6
  unless defined?(HELP)
7
7
  Trepanning::Subcommand.set_name_prefix(__FILE__, self)
8
- HELP = 'Show the number of stack levels to hide'
8
+ HELP = 'Show the number of stack levels to hide'
9
9
  MIN_ABBREV = 'hide'.size
10
10
  end
11
11
  def run(args)
@@ -6,7 +6,8 @@ require_relative '../base/subsubmgr'
6
6
  class Trepan::Subcommand::ShowHighlight < Trepan::ShowBoolSubcommand
7
7
  unless defined?(HELP)
8
8
  Trepanning::Subcommand.set_name_prefix(__FILE__, self)
9
- HELP = 'Show whether we use highlight highlighting'
9
+ HELP = 'Show whether we use terminal highlighting'
10
+ MIN_ABBREV = 'high'.size
10
11
  end
11
12
 
12
13
  def run(args)
@@ -0,0 +1,17 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2011 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../base/subcmd'
4
+
5
+ class Trepan::Subcommand::ShowReload < Trepan::ShowBoolSubcommand
6
+ unless defined?(SHORT_HELP)
7
+ Trepanning::Subcommand.set_name_prefix(__FILE__, self)
8
+ HELP = "Show whether to reread source text when it changes"
9
+ MIN_ABBREV = 're'.size
10
+ end
11
+ end
12
+
13
+ if __FILE__ == $0
14
+ # Demo it.
15
+ require_relative '../../mock'
16
+ cmd = MockDebugger::sub_setup(Trepan::Subcommand::ShowReload, false)
17
+ end
@@ -0,0 +1,17 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2011 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../base/subcmd'
4
+
5
+ class Trepan::Subcommand::ShowTimer < Trepan::ShowBoolSubcommand
6
+ unless defined?(HELP)
7
+ Trepanning::Subcommand.set_name_prefix(__FILE__, self)
8
+ HELP = "Show status of the timing hook"
9
+ MIN_ABBREV = 'ti'.size
10
+ end
11
+ end
12
+
13
+ if __FILE__ == $0
14
+ # Demo it.
15
+ require_relative '../../mock'
16
+ cmd = MockDebugger::sub_setup(Trepan::Subcommand::ShowTimer)
17
+ end
@@ -3,8 +3,8 @@
3
3
  require_relative '../../base/subsubcmd'
4
4
 
5
5
  class Trepan::SubSubcommand::ShowTraceBuffer < Trepan::ShowBoolSubSubcommand
6
- Trepanning::SubSubcommand.set_name_prefix(__FILE__, self)
7
6
  unless defined?(HELP)
7
+ Trepanning::SubSubcommand.set_name_prefix(__FILE__, self)
8
8
  HELP = <<-EOH
9
9
  #{CMD} [NUM]
10
10
 
@@ -49,37 +49,37 @@ unless option -c or --continue is given.
49
49
  end
50
50
 
51
51
  def complete(prefix)
52
- # opts = %w(-c --continue --no-continue -N --no -y --yes
53
- # --verbose --no-verbose)
54
- # return Trepan::Complete.complete_token(opts, prefix) if prefix.empty?
55
- Readline::FILENAME_COMPLETION_PROC.call(prefix) || []
52
+ files = Readline::FILENAME_COMPLETION_PROC.call(prefix) || []
53
+ opts = %w(-c --continue --no-continue -N --no -y --yes
54
+ --verbose --no-verbose) + files
55
+ Trepan::Complete.complete_token(opts, prefix)
56
56
  end
57
57
 
58
58
  def parse_options(options, args) # :nodoc
59
59
  seen_yes_no = false
60
60
  parser = OptionParser.new do |opts|
61
- opts.on("-c", "--[no-]continue",
62
- "Continue in the face of errors") do
61
+ opts.on('-c', '--[no-]continue',
62
+ 'Continue in the face of errors') do
63
63
  |v|
64
64
  options[:abort_on_error] = !v
65
65
  end
66
- opts.on("-v",
67
- "--[no-]verbose", "echo each command as it is executed") do
66
+ opts.on('-v',
67
+ '--[no-]verbose', 'echo each command as it is executed') do
68
68
  |v|
69
69
  options[:verbose] = v
70
70
  end
71
- opts.on("-N", "--no", "Use 'no' in any confirmation prompts") do
71
+ opts.on('-N', '--no', "Use 'no' in any confirmation prompts") do
72
72
  |v|
73
73
  if seen_yes_no
74
- msg("Yes/No option already seen. This option (no) ignored.")
74
+ msg('Yes/No option already seen. This option (no) ignored.')
75
75
  end
76
76
  options[:confirm_val] = false
77
77
  end
78
- opts.on("-q", "--[no-]quiet", "Silence debugger output") do
78
+ opts.on('-q', '--[no-]quiet', 'Silence debugger output') do
79
79
  |v|
80
80
  options[:quiet] = v
81
81
  end
82
- opts.on("-Y", "--yes", "Use 'yes' in any confirmation prompts") do
82
+ opts.on('-Y', '--yes', "Use 'yes' in any confirmation prompts") do
83
83
  |v|
84
84
  if seen_yes_no
85
85
  msg("Yes/No option already seen. This option, --yes, ignored.")
@@ -94,14 +94,15 @@ unless option -c or --continue is given.
94
94
 
95
95
  def run(args)
96
96
  options = parse_options(DEFAULT_OPTIONS.dup, args[1..-2])
97
- intf = @proc.dbgr.intf
97
+ intf = @proc.interfaces
98
98
  output = options[:quiet] ? Trepan::OutputNull.new(nil) : intf[-1].output
99
99
 
100
100
  filename = args[-1]
101
101
 
102
102
  expanded_file = File.expand_path(filename)
103
103
  unless File.readable?(expanded_file)
104
- errmsg("Debugger command file '%s' is not a readable file" % filename)
104
+ errmsg("Debugger command file '%s' (%s) is not a readable file" %
105
+ [filename, expanded_file])
105
106
  return false
106
107
  end
107
108
 
@@ -0,0 +1,20 @@
1
+ require_relative './base/cmd'
2
+ require_relative 'break'
3
+
4
+ class Trepan::Command::SetTempBreakpointCommand <
5
+ Trepan::Command::BreakCommand
6
+ ALIASES = []
7
+ CATEGORY = 'breakpoints'
8
+ NAME = File.basename(__FILE__, '.rb')
9
+ HELP = <<-HELP
10
+ Same as break, but the breakpoint is deleted when it is hit.
11
+
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
20
+
@@ -0,0 +1,114 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative 'base/cmd'
4
+ require_relative '../../app/complete'
5
+
6
+ class Trepan::Command::WatchgCommand < Trepan::Command
7
+ unless defined?(HELP)
8
+ NAME = File.basename(__FILE__, '.rb')
9
+ CATEGORY = 'breakpoints'
10
+ HELP = <<-EOH
11
+ #{NAME} GLOBAL_VARIABLE [on]
12
+ #{NAME} GLOBAL_VARIABLE nostop
13
+ #{NAME} GLOBAL_VARIABLE off
14
+
15
+ Use Kernel.trace_var to trace changes of global variable
16
+ GLOBAL_VARIABLE. If nostop is given, then we just print out the
17
+ location and variable name but do not stop in the debugger.
18
+
19
+ To remove a prior trace, add "off" to the end.
20
+
21
+ Note in contrast to other events, stopping for variable tracing occurs
22
+ *after* the event, not before.
23
+
24
+ NOTE: this command name will likely change in the future.
25
+
26
+ Examples:
27
+ #{NAME} $PROGRAM_NAME # enter debugger if global $PROGRAM_NAME changes
28
+ #{NAME} $PROGRAM_NAME on # same as above
29
+ #{NAME} $PROGRAN_NAME stop # just print places the varaible is set
30
+ # along with the location
31
+ #{NAME} $PROGRAN_NAME off # remove watching changes
32
+
33
+ See also 'info breakpoints'
34
+ EOH
35
+
36
+ MAX_ARGS = 3
37
+ SHORT_HELP = "Set to display trace or untrace a global variable."
38
+ end
39
+
40
+ def complete(prefix)
41
+ Trepan::Complete.complete_token(global_variables.map{|v| v.to_s},
42
+ prefix)
43
+ end
44
+
45
+ def trace_var(traced_var, action)
46
+ traced_sym = traced_var.to_sym
47
+ if traced_var[0] == '$'
48
+ unless global_variables.member?(traced_sym)
49
+ msg "Warning: global variable #{traced_var} is not currently defined"
50
+ end
51
+ if @proc.traced_vars.member?(traced_var)
52
+ if @proc.traced_vars[traced_var] == action
53
+ errmsg "global variable #{traced_var} is already traced with #{action}."
54
+ return
55
+ end
56
+ else
57
+ Kernel.trace_var(traced_sym,
58
+ lambda {|val|
59
+ @proc.core.trace_var_processor(traced_var, val)})
60
+ end
61
+ @proc.traced_vars[traced_var] = action
62
+ msg("Tracing for variable #{traced_var} set to: #{action}.")
63
+ else
64
+ errmsg "Expecting a global variable to trace, got: #{traced_var}"
65
+ end
66
+ end
67
+
68
+ def run(args)
69
+ if args.size == 2
70
+ trace_var(args[1], 'stop')
71
+ elsif args.size == 3
72
+ unless %w(nostop on off).member?(args[2])
73
+ errmsg "Expecting third argument to be 'on' 'off' or 'nostop'; got #{args[2]}"
74
+ return
75
+ end
76
+ traced_var = args[1]
77
+ if args[2] == 'off'
78
+ unless @proc.traced_vars.member?(traced_var)
79
+ msg "Warning: variable #{traced_var} is not currently marked as traced."
80
+ end
81
+ untrace_var(traced_var.to_sym)
82
+ @proc.traced_vars.delete(traced_var)
83
+ msg("Removed trace for variable #{traced_var}.")
84
+ else
85
+ traced_var = args[1]
86
+ if @proc.traced_vars.member?(traced_var)
87
+ @proc.traced_vars[traced_var] = args[2]
88
+ else
89
+ trace_var(traced_var, args[2])
90
+ end
91
+ end
92
+ else
93
+ errmsg "Expecting two or three arguments, got #{args.size}"
94
+ end
95
+ end
96
+ end
97
+
98
+ if __FILE__ == $0
99
+ # Demo it.
100
+ require_relative '../mock'
101
+ dbgr, cmd = MockDebugger::setup
102
+ core = dbgr.core
103
+ def core.event_processor(event, frame, arg=nil)
104
+ puts "traced global changed: event: #{event}, frame #{frame}, #{arg.inspect} "
105
+ end
106
+ cmd.run(%w(variable $FOO))
107
+ cmd.run(%w(variable $FOO))
108
+ cmd.run(%w(variable gaga))
109
+ $FOO=0
110
+ cmd.run(%w(variable $FOO off))
111
+ $FOO=1
112
+ cmd.run(%w(variable $FOO off))
113
+ end
114
+
data/processor/default.rb CHANGED
@@ -1,48 +1,50 @@
1
1
  # Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
2
2
  require_relative '../app/default'
3
- class Trepan
4
- class CmdProcessor
3
+ require_relative 'virtual'
4
+ class Trepan::CmdProcessor < Trepan::VirtualCmdProcessor
5
5
 
6
- DEFAULT_SETTINGS = {
7
- :autoeval => true, # Ruby eval non-debugger commands
8
- :autoirb => false, # Go into IRB in debugger command loop
9
- :autolist => false, # Run 'list'
10
-
11
- :basename => false, # Show basename of filenames only
12
- :confirm => true, # Confirm potentially dangerous operations?
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
- :hightlight => false, # Use terminal highlight?
6
+ DEFAULT_SETTINGS = {
7
+ :abbrev => true, # Allow abbreviations of debugger commands?
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
+ :confirm => true, # Confirm potentially dangerous operations?
14
+ :different => 'nostack', # stop *only* when different position?
15
+
16
+ :debugdbgr => false, # Debugging the debugger
17
+ :debugexcept => true, # Internal debugging of command exceptions
18
+ :debugmacro => false, # debugging macros
19
+ :debugskip => false, # Internal debugging of step/next skipping
20
+ :directory => # last-resort path-search for files
21
+ '$cdir:$cwd', # that are not fully qualified.
22
+
23
+ :hidestack => nil, # Fixnum. How many hidden outer
24
+ # debugger stack frames to hide?
25
+ # nil or -1 means compute value. 0
26
+ # means hide none. Less than 0 means show
27
+ # all stack entries.
28
+ :hightlight => false, # Use terminal highlight?
28
29
 
29
- :maxlist => 10, # Number of source lines to list
30
- :maxstack => 10, # backtrace limit
31
- :maxstring => 150, # Strings which are larger than this
32
- # will be truncated to this length when
33
- # printed
34
- :maxwidth => (ENV['COLUMNS'] || '80').to_i,
35
- :prompt => 'trepan', # core part of prompt. Additional info like
36
- # debug nesting and
37
- :save_cmdfile => nil, # If set, debugger command file to be
38
- # used on restart
39
- :timer => false, # show elapsed time between events
40
- :traceprint => false, # event tracing printing
41
- :tracebuffer => false, # save events to a trace buffer.
42
- :user_cmd_dir => File.join(Trepan::HOME_DIR, 'tepanx', 'command'),
43
- # User command directory
44
- }
45
- end
30
+ :maxlist => 10, # Number of source lines to list
31
+ :maxstack => 10, # backtrace limit
32
+ :maxstring => 150, # Strings which are larger than this
33
+ # will be truncated to this length when
34
+ # printed
35
+ :maxwidth => (ENV['COLUMNS'] || '80').to_i,
36
+ :prompt => 'trepan', # core part of prompt. Additional info like
37
+ # debug nesting and
38
+ :reload => false, # Reread source file if we determine
39
+ # it has changed?
40
+ :save_cmdfile => nil, # If set, debugger command file to be
41
+ # used on restart
42
+ :timer => false, # show elapsed time between events
43
+ :traceprint => false, # event tracing printing
44
+ :tracebuffer => false, # save events to a trace buffer.
45
+ :user_cmd_dir => File.join(%W(#{Trepan::HOME_DIR} trepan command)),
46
+ # User command directory
47
+ }
46
48
  end
47
49
 
48
50
  if __FILE__ == $0
data/processor/display.rb CHANGED
@@ -1,7 +1,8 @@
1
- # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
1
+ # Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
2
2
  require_relative '../app/display'
3
+ require_relative 'virtual'
3
4
  class Trepan
4
- class CmdProcessor
5
+ class CmdProcessor < VirtualCmdProcessor
5
6
  attr_reader :displays
6
7
 
7
8
  def display_initialize
data/processor/eval.rb CHANGED
@@ -1,6 +1,8 @@
1
- # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
1
+ # Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
2
+ require 'rubygems'
3
+ require_relative 'virtual'
2
4
  class Trepan
3
- class CmdProcessor
5
+ class CmdProcessor < VirtualCmdProcessor
4
6
 
5
7
  def debug_eval(str, max_fake_filename=15)
6
8
  begin
@@ -73,7 +75,7 @@ end
73
75
 
74
76
  if __FILE__ == $0
75
77
  # Demo it.
76
- cmdp = Trepan::CmdProcessor.new
78
+ cmdp = Trepan::CmdProcessor.new([])
77
79
  puts cmdp.fake_eval_filename('x = 1; y = 2')
78
80
  puts cmdp.fake_eval_filename('x = 1; y = 2', 7)
79
81
 
@@ -3,9 +3,10 @@
3
3
  # Trace::Buffer for this prupose.
4
4
  require 'trace'
5
5
  require 'linecache'
6
+ require_relative 'virtual'
6
7
 
7
8
  class Trepan
8
- class CmdProcessor
9
+ class CmdProcessor < VirtualCmdProcessor
9
10
 
10
11
  attr_reader :eventbuf
11
12
  attr_reader :event_tracefilter
@@ -115,7 +116,7 @@ class Trepan
115
116
  end
116
117
  if __FILE__ == $0
117
118
  # Demo it.
118
- cmdproc = Trepan::CmdProcessor.new
119
+ cmdproc = Trepan::CmdProcessor.new([])
119
120
  cmdproc.eventbuf_initialize(5)
120
121
 
121
122
  def cmdproc.msg(mess)
data/processor/frame.rb CHANGED
@@ -1,9 +1,10 @@
1
- # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
1
+ # Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
2
2
  require 'linecache'
3
3
  require_relative '../app/complete'
4
4
  require_relative '../app/frame'
5
+ require_relative 'virtual'
5
6
  class Trepan
6
- class CmdProcessor
7
+ class CmdProcessor < VirtualCmdProcessor
7
8
 
8
9
  attr_reader :current_thread
9
10
 
@@ -44,7 +45,15 @@ class Trepan
44
45
  if frame
45
46
  @frame = frame
46
47
  @frame_index = frame_num
47
- print_location unless @settings[:traceprint]
48
+ unless @settings[:traceprint]
49
+ opts = {
50
+ :basename => settings[:basename],
51
+ :current_pos => frame_num,
52
+ :maxwidth => settings[:maxwidth],
53
+ }
54
+ print_stack_trace_from_to(frame_num, frame_num, frame, opts)
55
+ print_location
56
+ end
48
57
  @line_no = frame_line() - 1
49
58
  @frame
50
59
  else