trepanning 0.0.6 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/ChangeLog +214 -0
  2. data/NEWS +12 -0
  3. data/README.textile +1 -7
  4. data/Rakefile +13 -0
  5. data/app/default.rb +5 -4
  6. data/app/disassemble.rb +25 -3
  7. data/app/run.rb +0 -18
  8. data/bin/trepan +4 -6
  9. data/data/irbrc +3 -17
  10. data/io/base_io.rb +3 -1
  11. data/io/null_output.rb +41 -0
  12. data/lib/trepanning.rb +10 -13
  13. data/processor/command/backtrace.rb +7 -6
  14. data/processor/command/base/subcmd.rb +4 -0
  15. data/processor/command/base/submgr.rb +1 -1
  16. data/processor/command/base/subsubmgr.rb +1 -1
  17. data/processor/command/break.rb +12 -4
  18. data/processor/command/continue.rb +2 -2
  19. data/processor/command/delete.rb +1 -1
  20. data/processor/command/disable.rb +1 -1
  21. data/processor/command/disassemble.rb +1 -1
  22. data/processor/command/finish.rb +3 -3
  23. data/processor/command/info_subcmd/iseq.rb +9 -0
  24. data/processor/command/info_subcmd/registers_subcmd/dfp.rb +7 -16
  25. data/processor/command/info_subcmd/registers_subcmd/lfp.rb +5 -17
  26. data/processor/command/info_subcmd/registers_subcmd/pc.rb +6 -19
  27. data/processor/command/info_subcmd/registers_subcmd/sp.rb +14 -24
  28. data/processor/command/list.rb +34 -19
  29. data/processor/command/reload.rb +1 -1
  30. data/processor/command/restart.rb +8 -9
  31. data/processor/command/set_subcmd/auto.rb +1 -2
  32. data/processor/command/set_subcmd/auto_subcmd/eval.rb +6 -19
  33. data/processor/command/set_subcmd/auto_subcmd/irb.rb +7 -23
  34. data/processor/command/set_subcmd/auto_subcmd/list.rb +5 -22
  35. data/processor/command/set_subcmd/basename.rb +6 -20
  36. data/processor/command/set_subcmd/debug.rb +1 -1
  37. data/processor/command/set_subcmd/debug_subcmd/dbgr.rb +9 -22
  38. data/processor/command/set_subcmd/debug_subcmd/except.rb +8 -20
  39. data/processor/command/set_subcmd/debug_subcmd/macro.rb +7 -19
  40. data/processor/command/set_subcmd/debug_subcmd/skip.rb +5 -18
  41. data/processor/command/set_subcmd/debug_subcmd/stack.rb +5 -18
  42. data/processor/command/set_subcmd/hidelevel.rb +60 -0
  43. data/processor/command/set_subcmd/max.rb +1 -1
  44. data/processor/command/set_subcmd/max_subcmd/list.rb +12 -23
  45. data/processor/command/set_subcmd/max_subcmd/stack.rb +8 -31
  46. data/processor/command/set_subcmd/substitute.rb +1 -1
  47. data/processor/command/set_subcmd/substitute_subcmd/eval.rb +1 -1
  48. data/processor/command/set_subcmd/substitute_subcmd/path.rb +1 -1
  49. data/processor/command/set_subcmd/substitute_subcmd/string.rb +6 -18
  50. data/processor/command/set_subcmd/timer.rb +1 -1
  51. data/processor/command/set_subcmd/trace.rb +1 -1
  52. data/processor/command/set_subcmd/trace_subcmd/buffer.rb +1 -1
  53. data/processor/command/set_subcmd/trace_subcmd/print.rb +5 -21
  54. data/processor/command/set_subcmd/trace_subcmd/var.rb +1 -1
  55. data/processor/command/show_subcmd/args.rb +9 -27
  56. data/processor/command/show_subcmd/auto_subcmd/eval.rb +3 -15
  57. data/processor/command/show_subcmd/auto_subcmd/irb.rb +3 -15
  58. data/processor/command/show_subcmd/auto_subcmd/list.rb +3 -18
  59. data/processor/command/show_subcmd/basename.rb +3 -1
  60. data/processor/command/show_subcmd/hidelevel.rb +41 -0
  61. data/processor/command/show_subcmd/max.rb +1 -1
  62. data/processor/command/show_subcmd/trace_subcmd/buffer.rb +1 -1
  63. data/processor/command/show_subcmd/trace_subcmd/print.rb +1 -1
  64. data/processor/command/source.rb +6 -5
  65. data/processor/command/undisplay.rb +0 -1
  66. data/processor/default.rb +6 -2
  67. data/processor/frame.rb +2 -21
  68. data/processor/location.rb +44 -18
  69. data/processor/main.rb +0 -11
  70. data/processor/mock.rb +25 -0
  71. data/processor/validate.rb +34 -18
  72. data/test/functional/fn_helper.rb +14 -4
  73. data/test/functional/test-break.rb +35 -73
  74. data/test/functional/test-condition.rb +9 -10
  75. data/test/functional/test-delete.rb +5 -3
  76. data/test/unit/test-app-disassemble.rb +15 -3
  77. data/test/unit/test-app-run.rb +0 -4
  78. data/test/unit/test-cmd-break.rb +3 -0
  79. metadata +15 -11
@@ -15,22 +15,7 @@ end
15
15
  if __FILE__ == $0
16
16
  # Demo it.
17
17
  require_relative '../../../mock'
18
- require_relative '../../../subcmd'
19
- name = File.basename(__FILE__, '.rb')
20
-
21
- # FIXME: DRY the below code
22
- dbgr, show_cmd = MockDebugger::setup('show')
23
- testcmdMgr = Trepan::Subcmd.new(show_cmd)
24
- auto_cmd = Trepan::SubSubcommand::ShowAuto.new(dbgr.core.processor,
25
- show_cmd)
26
-
27
- # FIXME: remove the 'join' below
28
- cmd_name = Trepan::SubSubcommand::ShowAutoList::PREFIX.join('')
29
- autox_cmd = Trepan::SubSubcommand::ShowAutoList.new(show_cmd.proc, auto_cmd,
30
- cmd_name)
31
- # require_relative '../../../../lib/trepanning'
32
- # dbgr = Trepan.new(:set_restart => true)
33
- # dbgr.debugger
34
- autox_cmd.run([])
35
-
18
+ require_relative '../auto'
19
+ cmd = MockDebugger::subsub_setup(Trepan::SubSubcommand::ShowAuto,
20
+ Trepan::SubSubcommand::ShowAutoList)
36
21
  end
@@ -4,8 +4,10 @@ require_relative '../base/subcmd'
4
4
 
5
5
  class Trepan::Subcommand::ShowBasename < Trepan::ShowBoolSubcommand
6
6
  unless defined?(HELP)
7
- HELP = "Show only file basename in showing file names"
7
+ HELP = "Show only file basename in showing file names"
8
8
  MIN_ABBREV = 'ba'.size
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ PREFIX = %W(show #{NAME})
9
11
  end
10
12
 
11
13
  end
@@ -0,0 +1,41 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../base/subsubcmd'
4
+
5
+ class Trepan::Subcommand::ShowHidelevel < Trepan::ShowIntSubcommand
6
+ unless defined?(HELP)
7
+ HELP = 'Show the number of stack levels to hide'
8
+ MIN_ABBREV = 'hide'.size
9
+ NAME = File.basename(__FILE__, '.rb')
10
+ PREFIX = %w(show hidelevel)
11
+ end
12
+ def run(args)
13
+ if @proc.settings[:hidelevel]
14
+ super
15
+ else
16
+ help = self.class.const_get(:HELP)
17
+ msg "%s is auto selection." % help[5..-1].capitalize
18
+ end
19
+ end
20
+
21
+ end
22
+
23
+ if __FILE__ == $0
24
+ # Demo it.
25
+ require_relative '../../mock'
26
+
27
+ # FIXME: DRY the below code
28
+ dbgr, cmd = MockDebugger::setup('show')
29
+ subcommand = Trepan::Subcommand::ShowHidelevel.new(cmd)
30
+
31
+ subcommand.run(subcommand.name)
32
+ subcommand.proc.settings[:hidelevel] = 1
33
+ subcommand.run(subcommand.name)
34
+
35
+ # require_relative '../../../../lib/trepanning'
36
+ # dbgr = Trepan.new
37
+ # dbgr.debugger
38
+ subcommand.summary_help(subcommand.name)
39
+ puts
40
+ puts '-' * 20
41
+ end
@@ -27,6 +27,6 @@ if __FILE__ == $0
27
27
  cmd_args = ['show', name]
28
28
  show_cmd.instance_variable_set('@last_args', cmd_args)
29
29
  # require_relative '../../../lib/trepanning'
30
- # Trepan.debug(:set_restart => true)
30
+ # Trepan.debug
31
31
  command.run(cmd_args)
32
32
  end
@@ -77,7 +77,7 @@ if __FILE__ == $0
77
77
  trace_cmd,
78
78
  cmd_name)
79
79
  # require_relative '../../../../lib/trepanning'
80
- # dbgr = Trepan.new(:set_restart => true)
80
+ # dbgr = Trepan.new
81
81
  # dbgr.debugger
82
82
  tb_cmd.run([])
83
83
 
@@ -31,7 +31,7 @@ if __FILE__ == $0
31
31
  trace_cmd,
32
32
  cmd_name)
33
33
  # require_relative '../../../../lib/trepanning'
34
- # dbgr = Trepan.new(:set_restart => true)
34
+ # dbgr = Trepan.new
35
35
  # dbgr.debugger
36
36
  tb_cmd.run([])
37
37
 
@@ -10,7 +10,7 @@ class Trepan::Command::SourceCommand < Trepan::Command
10
10
  unless defined?(HELP)
11
11
  NAME = File.basename(__FILE__, '.rb')
12
12
  HELP = <<-HELP
13
- #{NAME} [-v][-Y|-N][-c] FILE
13
+ #{NAME} [-v][-Y|-N][-c][q] FILE
14
14
 
15
15
  Read debugger commands from a file named FILE. Optional -v switch
16
16
  (before the filename) causes each command in FILE to be echoed as it
@@ -33,6 +33,8 @@ unless option -c is given.
33
33
  verbose = false
34
34
  parms = args[1..-1]
35
35
  opts = {}
36
+ intf = @proc.dbgr.intf
37
+ output = intf[-1].output
36
38
  parms.each do |arg|
37
39
  case arg
38
40
  when '-v'
@@ -43,6 +45,8 @@ unless option -c is given.
43
45
  opts[:confirm_val] = false
44
46
  when '-c'
45
47
  opts[:abort_on_error] = false
48
+ when '-q'
49
+ output = Trepan::OutputNull.new(nil)
46
50
  end
47
51
  end
48
52
 
@@ -55,10 +59,7 @@ unless option -c is given.
55
59
  end
56
60
 
57
61
  # Push a new debugger interface.
58
- intf = @proc.dbgr.intf
59
- script_intf = Trepan::ScriptInterface.new(expanded_file,
60
- intf[-1].output,
61
- opts)
62
+ script_intf = Trepan::ScriptInterface.new(expanded_file, output, opts)
62
63
  intf << script_intf
63
64
  return false
64
65
  end
@@ -8,7 +8,6 @@ class Trepan::Command::UndisplayCommand < Trepan::Command
8
8
  unless defined?(HELP)
9
9
  NAME = File.basename(__FILE__, '.rb')
10
10
  HELP = <<EOH
11
-
12
11
  undisplay DISPLAY_NUMBER ...
13
12
  Cancel some expressions to be displayed when program stops.
14
13
  Arguments are the code numbers of the expressions to stop displaying.
data/processor/default.rb CHANGED
@@ -15,10 +15,14 @@ class Trepan
15
15
  :debugexcept => true, # Internal debugging of command exceptions
16
16
  :debugmacro => false, # debugging macros
17
17
  :debugskip => false, # Internal debugging of step/next skipping
18
- :debugstack => false, # How hidden outer debugger stack frames
19
18
  :directory => # last-resort path-search for files
20
19
  '$cdir:$cwd', # that are not fully qualified.
21
20
 
21
+ :hidestack => nil, # Fixnum. How many hidden outer
22
+ # debugger stack frames to hide?
23
+ # nil or -1 means compute value. 0
24
+ # means hide none. Less than 0 means show
25
+ # all stack entries.
22
26
  :maxlist => 10, # Number of source lines to list
23
27
  :maxstack => 10, # backtrace limit
24
28
  :maxstring => 150, # Strings which are larger than this
@@ -34,7 +38,7 @@ class Trepan
34
38
  :tracebuffer => false, # save events to a trace buffer.
35
39
  :user_cmd_dir => File.join(Trepanning::HOME_DIR, 'trepan', 'command'),
36
40
  # User command directory
37
- } unless defined?(DEFAULT_SETTINGS)
41
+ }
38
42
  end
39
43
  end
40
44
 
data/processor/frame.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  # Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.net>
2
- require 'tempfile'
3
2
  require 'linecache'
4
3
  require_relative '../app/frame'
5
4
  class Trepan
@@ -44,8 +43,7 @@ class Trepan
44
43
  if frame
45
44
  @frame = frame
46
45
  @frame_index = frame_num
47
- frame_eval_remap if 'EVAL' == @frame.type
48
- print_location
46
+ print_location unless @settings[:traceprint]
49
47
  @line_no = frame_line() - 1
50
48
  @frame
51
49
  else
@@ -67,23 +65,6 @@ class Trepan
67
65
  container
68
66
  end
69
67
 
70
- # If frame type is EVAL, set up to remap the string to a temporary file.
71
- def frame_eval_remap
72
- to_str = Trepan::Frame::eval_string(@frame)
73
- return nil unless to_str.is_a?(String)
74
-
75
- # All systems go!
76
- unless @remap_iseq.member?(@frame.iseq.sha1)
77
- tempfile = Tempfile.new(['eval-', '.rb'])
78
- tempfile.open.puts(to_str)
79
-
80
- @remap_iseq[@frame.iseq.sha1] = ['file', tempfile.path]
81
- tempfile.close
82
- LineCache::cache(tempfile.path)
83
- end
84
- return true
85
- end
86
-
87
68
  def frame_line
88
69
  if @event == 'vm-insn' && @frame.iseq
89
70
  pc_offset = @frame.pc_offset
@@ -111,7 +92,6 @@ class Trepan
111
92
  @hidelevels[@current_thread]
112
93
  end
113
94
 
114
- frame_eval_remap if 'EVAL' == @frame.type
115
95
  end
116
96
 
117
97
  # Remove access to thread and frame variables
@@ -230,6 +210,7 @@ if __FILE__ == $0
230
210
  proc.adjust_frame(0, true)
231
211
  puts '*' * 10
232
212
  proc.top_frame.stack_size.times { proc.adjust_frame(1, false) }
213
+ puts '*' * 10
233
214
  proc.adjust_frame(proc.top_frame.stack_size-1, true)
234
215
  proc.top_frame.stack_size.times { proc.adjust_frame(-1, false) }
235
216
 
@@ -11,13 +11,24 @@ class Trepan
11
11
  @reload_on_change = nil
12
12
  end
13
13
 
14
+ def canonic_container(container)
15
+ [container[0], canonic_file(container[1])]
16
+ end
17
+
18
+ def canonic_file(filename)
19
+ # For now we want resolved filenames
20
+ @settings[:basename] ? File.basename(filename) :
21
+ # Cache this?
22
+ Pathname.new(filename).cleanpath.to_s
23
+ end
24
+
14
25
  def resolve_file_with_dir(path_suffix)
15
- settings[:directory].split(/:/).each do |dir|
26
+ @settings[:directory].split(/:/).each do |dir|
16
27
  dir =
17
28
  if '$cwd' == dir
18
29
  Dir.pwd
19
30
  elsif '$cdir' == dir
20
- @dbgr.initial_dir
31
+ RubyVM::OS_STARTUP_DIR
21
32
  else
22
33
  dir
23
34
  end
@@ -28,10 +39,11 @@ class Trepan
28
39
  nil
29
40
  end
30
41
 
31
- # Get line +line_number+ from file named +filename+. Return "\n"
32
- # there was a problem. Leading blanks are stripped off.
42
+ # Get line +line_number+ from file named +filename+. Return ''
43
+ # if there was a problem. Leading blanks are stripped off.
33
44
  def line_at(filename, line_number) # :nodoc:
34
45
  line = LineCache::getline(filename, line_number, @reload_on_change)
46
+
35
47
  unless line
36
48
  # Try using search directories (set with command "directory")
37
49
  if filename[0..0] != File::SEPARATOR
@@ -43,22 +55,28 @@ class Trepan
43
55
  end
44
56
  end
45
57
  end
46
- return "\n" unless line
47
- return line.lstrip.chomp
58
+ line ? line.lstrip.chomp : line
48
59
  end
49
60
 
50
61
  def loc_and_text(loc, frame, line_no, source_container)
51
- if source_container[0] != 'file'
62
+ found_line = true
63
+ ## FIXME: condition is too long.
64
+ if source_container[0] == 'string' && frame.iseq && frame.iseq.source
65
+ file = LineCache::map_iseq(frame.iseq)
66
+ text = LineCache::getline(frame.iseq, line_no)
67
+ loc += " remapped #{canonic_file(file)}:#{line_no}"
68
+ elsif source_container[0] != 'file'
52
69
  via = loc
53
70
  while source_container[0] != 'file' && frame.prev do
54
71
  frame = frame.prev
55
72
  source_container = frame_container(frame, false)
56
73
  end
57
74
  if source_container[0] == 'file'
58
- line_no = frame.source_location[0]
59
- filename = source_container[1]
60
- loc += " via #{canonic_file(filename)}:#{line_no}"
61
- text = line_at(filename, line_no)
75
+ line_no = frame.source_location[0]
76
+ filename = source_container[1]
77
+ loc += " via #{canonic_file(filename)}:#{line_no}"
78
+ text = line_at(filename, line_no)
79
+ found_line = false
62
80
  end
63
81
  else
64
82
  container = source_container[1]
@@ -69,7 +87,7 @@ class Trepan
69
87
 
70
88
  text = line_at(container, line_no)
71
89
  end
72
- [loc, line_no, text]
90
+ [loc, line_no, text, found_line]
73
91
  end
74
92
 
75
93
  def print_location
@@ -94,9 +112,11 @@ class Trepan
94
112
  @line_no = frame_line
95
113
 
96
114
  loc = source_location_info(source_container, @line_no, @frame)
97
- loc, @line_no, text = loc_and_text(loc, @frame, @line_no,
98
- source_container)
99
- msg "#{ev} (#{loc})"
115
+ loc, @line_no, text, found_line =
116
+ loc_and_text(loc, @frame, @line_no, source_container)
117
+
118
+ ip_str = @frame.iseq ? " @#{frame.pc_offset}" : ''
119
+ msg "#{ev} (#{loc}#{ip_str})"
100
120
 
101
121
  if %w(return c-return).member?(@event)
102
122
  retval = Trepan::Frame.value_returned(@frame, @event)
@@ -107,14 +127,20 @@ class Trepan
107
127
  msg text
108
128
  @line_no -= 1
109
129
  end
130
+ unless found_line
131
+ # Can't find source line, so give assembly as consolation.
132
+ # This great idea comes from the Rubinius reference debugger.
133
+ run_command('disassemble')
134
+ end
110
135
  end
111
136
 
112
137
  def source_location_info(source_container, line_no, frame)
113
138
  filename = source_container[1]
139
+ ## FIXME: condition is too long.
114
140
  canonic_filename =
115
- if (0 == filename.index('(eval')) && frame.prev &&
116
- (eval_str = Trepan::Frame.eval_string(frame.prev))
117
- 'eval ' + safe_repr(eval_str, 15)
141
+ if 'string' == source_container[0] && frame.iseq && frame.iseq.source
142
+ eval_str = frame.iseq.source
143
+ 'eval "' + safe_repr(eval_str.gsub(/\n/,';'), 15) + '"'
118
144
  else
119
145
  canonic_file(filename)
120
146
  end
data/processor/main.rb CHANGED
@@ -122,17 +122,6 @@ class Trepan
122
122
  # FIXME: run start file and start commands.
123
123
  end
124
124
 
125
- def canonic_container(container)
126
- [container[0], canonic_file(container[1])]
127
- end
128
-
129
- def canonic_file(filename)
130
- # For now we want resolved filenames
131
- @settings[:basename] ? File.basename(filename) :
132
- # Cache this?
133
- Pathname.new(filename).cleanpath.to_s
134
- end
135
-
136
125
  def compute_prompt
137
126
  thread_str =
138
127
  if 1 == Thread.list.size
data/processor/mock.rb CHANGED
@@ -72,6 +72,31 @@ module MockDebugger
72
72
  end
73
73
  module_function :setup
74
74
 
75
+ def sub_setup(sub_class, run=true)
76
+ sub_name = sub_class.const_get('PREFIX')
77
+ dbgr, cmd = setup(sub_name[0], false)
78
+ cmd.proc.frame_setup(RubyVM::ThreadFrame::current.prev)
79
+ sub_cmd = sub_class.new(cmd)
80
+ sub_cmd.summary_help(sub_cmd.name)
81
+ puts
82
+ sub_cmd.run([cmd.name]) if run
83
+ return sub_cmd
84
+ end
85
+ module_function :sub_setup
86
+
87
+ def subsub_setup(sub_class, subsub_class, run=true)
88
+ subsub_name = subsub_class.const_get('PREFIX')
89
+ dbgr, cmd = setup(subsub_name[0], false)
90
+ cmd.proc.frame_setup(RubyVM::ThreadFrame::current.prev)
91
+ sub_cmd = sub_class.new(dbgr.core.processor, cmd)
92
+ subsub_cmd = subsub_class.new(cmd.proc, sub_cmd, subsub_name.join(''))
93
+ subsub_cmd.summary_help(subsub_cmd.name)
94
+ puts
95
+ subsub_cmd.run([]) if run
96
+ return subsub_cmd
97
+ end
98
+ module_function :subsub_setup
99
+
75
100
  def show_special_class_constants(cmd)
76
101
  puts 'ALIASES: %s' % [cmd.class.const_get('ALIASES').inspect] if
77
102
  cmd.class.constants.member?(:ALIASES)
@@ -151,6 +151,24 @@ class Trepan
151
151
  nil
152
152
  end
153
153
 
154
+ def parse_num_or_offset(position_str)
155
+ opts = {
156
+ :msg_on_error =>
157
+ "argument '%s' does not seem to eval to a method or an integer." %
158
+ position_str,
159
+ :min_value => 0
160
+ }
161
+ use_offset =
162
+ if position_str.size > 0 && position_str[0].downcase == 'o'
163
+ position_str[0] = ''
164
+ true
165
+ else
166
+ false
167
+ end
168
+ position = get_an_int(position_str, opts)
169
+ [position, use_offset]
170
+ end
171
+
154
172
  # Parse a breakpoint position. Return
155
173
  # - the position - a Fixnum
156
174
  # - the instruction sequence to use
@@ -167,11 +185,16 @@ class Trepan
167
185
  File.basename(container[1])
168
186
  iseq = @frame.iseq
169
187
  else
170
- errmsg "Unable to find instruction sequence for position #{position} in #{container[1]}"
188
+ errmsg("Unable to find instruction sequence for" +
189
+ " position #{position} in #{container[1]}")
171
190
  return [nil, nil, nil, true]
172
191
  end
173
192
  end
174
- use_offset = false
193
+ if args.empty? || 'if' == args[0]
194
+ use_offset = false
195
+ else
196
+ position, use_offset = parse_num_or_offset(args[0])
197
+ end
175
198
  else
176
199
  iseq = object_iseq(first)
177
200
  position_str =
@@ -190,20 +213,7 @@ class Trepan
190
213
  iseq = @frame.iseq unless container
191
214
  first
192
215
  end
193
- use_offset =
194
- if position_str.size > 0 && position_str[0].downcase == 'o'
195
- position_str[0] = ''
196
- true
197
- else
198
- false
199
- end
200
- opts = {
201
- :msg_on_error =>
202
- "argument '%s' does not seem to eval to a method or an integer." %
203
- position_str,
204
- :min_value => 0
205
- }
206
- position = get_an_int(position_str, opts)
216
+ position, use_offset = parse_num_or_offset(position_str)
207
217
  end
208
218
  condition = 'true'
209
219
  if args.size > 0 && 'if' == args[0]
@@ -344,11 +354,15 @@ if __FILE__ == $0
344
354
  else
345
355
  require 'thread_frame'
346
356
  require_relative '../app/mock'
357
+ require_relative './default'
358
+ require_relative 'frame'
347
359
  require_relative 'main' # Have to include before defining CmdProcessor!
348
360
  # FIXME
349
361
 
350
362
  proc = Trepan::CmdProcessor.new(Trepan::MockCore.new())
351
- proc.settings[:directory] = '$cwd'
363
+ proc.frame_initialize
364
+ proc.instance_variable_set('@settings',
365
+ Trepan::CmdProcessor::DEFAULT_SETTINGS)
352
366
  proc.frame_setup(RubyVM::ThreadFrame.current)
353
367
  onoff = %w(1 0 on off)
354
368
  onoff.each { |val| puts "onoff(#{val}) = #{proc.get_onoff(val)}" }
@@ -374,7 +388,7 @@ if __FILE__ == $0
374
388
  end
375
389
  puts '=' * 40
376
390
  # require_relative '../lib/trepanning'
377
- # dbgr = Trepan.new(:set_restart => true)
391
+ # dbgr = Trepan.new
378
392
  # dbgr.debugger
379
393
 
380
394
  # FIXME:
@@ -389,6 +403,8 @@ if __FILE__ == $0
389
403
  p proc.breakpoint_position(%w(1))
390
404
  p proc.breakpoint_position(%w(2 if a > b))
391
405
  p proc.get_int_list(%w(1+0 3-1 3))
406
+ require 'trepanning'
407
+ debugger
392
408
  p proc.get_int_list(%w(a 2 3))
393
409
  end
394
410
  end