trepanning 1.93.35 → 2.15.33

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 (134) hide show
  1. checksums.yaml +7 -0
  2. data/ChangeLog +491 -55
  3. data/LICENSE +1 -1
  4. data/NEWS +18 -14
  5. data/README.md +5 -22
  6. data/Rakefile +22 -1
  7. data/app/breakpoint.rb +5 -3
  8. data/app/core.rb +147 -179
  9. data/app/default.rb +47 -46
  10. data/app/file.rb +6 -7
  11. data/app/frame.rb +183 -176
  12. data/app/markdown.rb +2 -9
  13. data/app/options.rb +1 -1
  14. data/app/run.rb +71 -37
  15. data/interface/script.rb +8 -8
  16. data/io.rb +19 -20
  17. data/lib/trepanning.rb +292 -297
  18. data/processor.rb +332 -344
  19. data/processor/breakpoint.rb +98 -96
  20. data/processor/command/base/submgr.rb +9 -9
  21. data/processor/command/break.rb +40 -38
  22. data/processor/command/continue.rb +15 -10
  23. data/processor/command/debug.rb +6 -25
  24. data/processor/command/delete.rb +21 -12
  25. data/processor/command/directory.rb +15 -13
  26. data/processor/command/disable.rb +12 -9
  27. data/processor/command/disassemble.rb +80 -74
  28. data/processor/command/display.rb +15 -12
  29. data/processor/command/down.rb +8 -3
  30. data/processor/command/edit.rb +37 -23
  31. data/processor/command/enable.rb +11 -8
  32. data/processor/command/eval.rb +24 -22
  33. data/processor/command/finish.rb +50 -48
  34. data/processor/command/help.rb +1 -1
  35. data/processor/command/info_subcmd/breakpoints.rb +7 -7
  36. data/processor/command/info_subcmd/files.rb +195 -196
  37. data/processor/command/info_subcmd/frame.rb +7 -4
  38. data/processor/command/info_subcmd/locals.rb +29 -12
  39. data/processor/command/info_subcmd/program.rb +48 -39
  40. data/processor/command/info_subcmd/registers_subcmd/ep.rb +46 -0
  41. data/processor/command/info_subcmd/registers_subcmd/helper.rb +32 -35
  42. data/processor/command/info_subcmd/registers_subcmd/sp.rb +29 -23
  43. data/processor/command/info_subcmd/return.rb +28 -10
  44. data/processor/command/info_subcmd/variables_subcmd/class.rb +3 -3
  45. data/processor/command/info_subcmd/variables_subcmd/constants.rb +77 -0
  46. data/processor/command/info_subcmd/variables_subcmd/globals.rb +7 -7
  47. data/processor/command/info_subcmd/variables_subcmd/instance.rb +68 -22
  48. data/processor/command/info_subcmd/variables_subcmd/locals.rb +148 -67
  49. data/processor/command/list.rb +14 -8
  50. data/processor/command/macro.rb +1 -1
  51. data/processor/command/next.rb +1 -0
  52. data/processor/command/set_subcmd/auto.rb +3 -3
  53. data/processor/command/set_subcmd/different.rb +30 -29
  54. data/processor/command/set_subcmd/events.rb +74 -48
  55. data/processor/command/set_subcmd/max_subcmd/list.rb +12 -5
  56. data/processor/command/set_subcmd/max_subcmd/width.rb +28 -19
  57. data/processor/command/set_subcmd/register.rb +37 -0
  58. data/processor/command/set_subcmd/register_subcmd/pc.rb +67 -0
  59. data/processor/command/set_subcmd/register_subcmd/sp.rb +75 -0
  60. data/processor/command/set_subcmd/reload.rb +12 -10
  61. data/processor/command/set_subcmd/return.rb +68 -44
  62. data/processor/command/shell.rb +3 -2
  63. data/processor/command/show_subcmd/different.rb +17 -14
  64. data/processor/command/show_subcmd/events.rb +25 -25
  65. data/processor/default.rb +1 -1
  66. data/processor/eval.rb +14 -15
  67. data/processor/frame.rb +43 -36
  68. data/processor/help.rb +5 -5
  69. data/processor/hook.rb +26 -29
  70. data/processor/location.rb +54 -51
  71. data/processor/mock.rb +4 -3
  72. data/processor/running.rb +113 -103
  73. data/processor/validate.rb +401 -373
  74. data/test/data/debug.cmd +8 -0
  75. data/test/data/debug.right +13 -0
  76. data/test/data/debugger-stop.right +6 -4
  77. data/test/data/fname-with-blank.cmd +1 -1
  78. data/test/data/fname-with-blank.right +5 -0
  79. data/test/data/pc.cmd +8 -0
  80. data/test/data/pc.right +10 -0
  81. data/test/data/quit.right +3 -1
  82. data/test/data/trace.cmd +2 -2
  83. data/test/data/trace.right +41 -20
  84. data/test/example/assign.rb +6 -0
  85. data/test/functional/fn_helper.rb +11 -17
  86. data/test/functional/test-break-long.rb +15 -16
  87. data/test/functional/test-break.rb +6 -8
  88. data/test/functional/test-condition.rb +8 -10
  89. data/test/functional/test-debugger-call-bug.rb +21 -22
  90. data/test/functional/test-delete.rb +57 -59
  91. data/test/functional/test-eval.rb +101 -103
  92. data/test/functional/test-finish.rb +24 -33
  93. data/test/functional/test-immediate-step-bug.rb +6 -10
  94. data/test/functional/test-next.rb +64 -65
  95. data/test/functional/test-raise.rb +63 -64
  96. data/test/functional/test-recursive-bt.rb +81 -76
  97. data/test/functional/test-remap.rb +6 -7
  98. data/test/functional/test-return.rb +44 -38
  99. data/test/functional/test-step.rb +55 -53
  100. data/test/functional/test-stepbug.rb +6 -9
  101. data/test/functional/test-watchg.rb +40 -39
  102. data/test/integration/test-debug.rb +12 -0
  103. data/test/integration/test-debugger-stop.rb +7 -7
  104. data/test/integration/test-pc.rb +24 -0
  105. data/test/integration/test-trace.rb +1 -1
  106. data/test/unit/cmd-helper.rb +0 -1
  107. data/test/unit/test-app-brkpt.rb +21 -21
  108. data/test/unit/test-app-brkptmgr.rb +7 -8
  109. data/test/unit/test-app-display.rb +3 -4
  110. data/test/unit/test-app-frame.rb +4 -5
  111. data/test/unit/test-base-subsubcmd.rb +2 -2
  112. data/test/unit/test-cmd-break.rb +6 -6
  113. data/test/unit/test-cmd-endisable.rb +7 -6
  114. data/test/unit/test-cmd-parse_list_cmd.rb +24 -24
  115. data/test/unit/test-io-tcpserver.rb +39 -35
  116. data/test/unit/test-proc-default.rb +23 -22
  117. data/test/unit/test-proc-eval.rb +1 -2
  118. data/test/unit/test-proc-frame.rb +8 -9
  119. data/test/unit/test-proc-list.rb +1 -1
  120. data/test/unit/test-proc-location.rb +2 -2
  121. data/test/unit/test-proc-main.rb +10 -10
  122. data/test/unit/test-proc-validate.rb +11 -13
  123. data/test/unit/test-subcmd-help.rb +1 -2
  124. data/trepanning.gemspec +8 -13
  125. metadata +44 -95
  126. data/COPYING +0 -57
  127. data/data/custom_require.rb +0 -44
  128. data/data/perldb.bindings +0 -17
  129. data/data/prelude.rb +0 -38
  130. data/processor/command/info_subcmd/variables_subcmd/constant.rb +0 -41
  131. data/processor/command/raise.rb +0 -48
  132. data/processor/command/set_subcmd/pc.rb +0 -62
  133. data/processor/command/set_subcmd/sp.rb +0 -67
  134. data/processor/eventbuf.rb +0 -133
@@ -0,0 +1,77 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2010-2011, 2015 Rocky Bernstein <rockyb@rubyforge.net>
3
+ require_relative '../../base/subsubcmd'
4
+ require_relative '../../../../app/util'
5
+
6
+ class Trepan::Subcommand::InfoVariablesConstants < Trepan::SubSubcommand
7
+ Trepan::Util.suppress_warnings {
8
+ Trepanning::Subcommand.set_name_prefix(__FILE__, self)
9
+ HELP = <<-EOH
10
+ #{CMD}
11
+ #{CMD}
12
+
13
+ Show class constants of the current stack frame.
14
+ Normally for each which show both the name and value. If you just
15
+ want a list of names add parameter 'names'.
16
+ EOH
17
+ SHORT_HELP = 'Show class constants via the current stack frame'
18
+ MIN_ABBREV = 'co'.size
19
+ MIN_ARGS = 0
20
+ MAX_ARGS = 1
21
+ NEED_STACK = true
22
+ }
23
+
24
+ def names
25
+ # FIXME: do less guess work. Decide based on other properties.
26
+ values = @proc.debug_eval_no_errmsg('self.class.constants')
27
+ if values.empty?
28
+ values = @proc.debug_eval_no_errmsg('self.constants')
29
+ end
30
+ return values ? values.sort.map{|c| c.to_s} || [] : []
31
+ end
32
+
33
+ def run_for_constant(args, klass=nil)
34
+ suffix = klass ? " for #{klass.to_s}" : '' rescue ''
35
+ if args.size == 2
36
+ last_arg = args[-1]
37
+ if names.member?(last_arg)
38
+ var_class =
39
+ @proc.safe_rep(@proc.debug_eval_no_errmsg(last_arg+'.class').inspect)
40
+ var_value =
41
+ @proc.safe_rep(@proc.debug_eval_no_errmsg(last_arg).inspect)
42
+ msg("#{last_arg} class: %s" % var_class)
43
+ msg("#{last_arg} value: %s" % var_value)
44
+ else
45
+ errmsg "No constant variable #{last_arg} defined#{suffix}."
46
+ end
47
+ elsif args.size == 1
48
+ if names.empty?
49
+ msg "No constant variables defined#{suffix}."
50
+ else
51
+ section "Constant variable names#{suffix}:"
52
+ width = settings[:maxwidth]
53
+ mess = Columnize::columnize(names,
54
+ @proc.settings[:maxwidth], ' ',
55
+ false, true, ' ' * 2).chomp
56
+ msg mess
57
+ end
58
+ else
59
+ errmsg("Wrong number of arguments #{args.size}")
60
+ end
61
+ end
62
+
63
+ def run(args)
64
+ run_for_constant(args, @proc.debug_eval('self'))
65
+ end
66
+ end
67
+
68
+ # Demo it.
69
+ if __FILE__ == $0
70
+ require_relative '../../../mock'
71
+ require_relative '../variables'
72
+ # cmd =
73
+ # MockDebugger::subsub_setup(Trepan::Subcommand::InfoVariables,
74
+ # Trepan::Subcommand::InfoVariablesConstants)
75
+ # cmd.run(cmd.prefix)
76
+ # cmd.run(cmd.prefix + ['name'])
77
+ end
@@ -8,7 +8,7 @@ class Trepan::Subcommand::InfoVariablesGlobals <
8
8
  Trepanning::Subcommand.set_name_prefix(__FILE__, self)
9
9
  HELP = <<-EOH
10
10
  #{CMD}
11
- #{CMD} [names]
11
+ #{CMD} [--names]
12
12
 
13
13
  Show global variables.
14
14
  Normally for each which show both the name and value. If you just
@@ -20,7 +20,7 @@ EOH
20
20
  NEED_STACK = true
21
21
  }
22
22
 
23
- def get_names
23
+ def names
24
24
  global_variables
25
25
  end
26
26
 
@@ -33,7 +33,7 @@ EOH
33
33
  else
34
34
  section "Global variable names:"
35
35
  width = settings[:maxwidth]
36
- mess = Columnize::columnize(global_variables.sort,
36
+ mess = Columnize::columnize(global_variables.sort,
37
37
  @proc.settings[:maxwidth], ' ',
38
38
  false, true, ' ' * 2).chomp
39
39
  msg mess
@@ -42,12 +42,12 @@ EOH
42
42
  errmsg("unrecognized argument: #{args[-1]}")
43
43
  end
44
44
  elsif args.size == 1
45
- names = get_names
45
+ names = names
46
46
  if names.empty?
47
47
  msg "No global variables defined."
48
48
  else
49
49
  section "Global variables:"
50
- names.sort.each do |var_name|
50
+ names.sort.each do |var_name|
51
51
  s = @proc.debug_eval(var_name.to_s)
52
52
  msg("#{var_name} = #{s.inspect}", :code=>true)
53
53
  end
@@ -61,8 +61,8 @@ end
61
61
  if __FILE__ == $0
62
62
  # Demo it.
63
63
  require_relative '../../../mock'
64
- cmd = MockDebugger::subsub_setup(Trepan::Subcommand::InfoVariablesGlobals,
64
+ cmd = MockDebugger::subsub_setup(Trepan::Subcommand::InfoVariablesGlobals,
65
65
  false)
66
66
  cmd.run(cmd.prefix)
67
- cmd.run(cmd.prefix + ['name'])
67
+ cmd.run(cmd.prefix + ['--name'])
68
68
  end
@@ -1,14 +1,15 @@
1
1
  # -*- coding: utf-8 -*-
2
- # Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
3
- require_relative 'locals'
2
+ # Copyright (C) 2010-2011, 2015 Rocky Bernstein <rockyb@rubyforge.net>
4
3
 
5
- class Trepan::Subcommand::InfoVariablesInstance <
6
- Trepan::Subcommand::InfoVariablesLocals
7
- Trepan::Util.suppress_warnings {
8
- Trepanning::Subcommand.set_name_prefix(__FILE__, self)
9
- HELP = <<-EOH
4
+ require_relative '../../base/subsubcmd'
5
+ require_relative '../../../../app/util'
6
+
7
+ class Trepan::Subcommand::InfoVariablesInstance < Trepan::SubSubcommand
8
+ Trepan::Util.suppress_warnings {
9
+ Trepanning::Subcommand.set_name_prefix(__FILE__, self)
10
+ HELP = <<-EOH
10
11
  #{CMD}
11
- #{CMD} [names]
12
+ #{CMD} [--names]
12
13
 
13
14
  Show instance variables of the current stack frame.
14
15
  Normally for each which show both the name and value. If you just
@@ -17,25 +18,70 @@ EOH
17
18
  SHORT_HELP = 'Show instance variables of the current stack frame'
18
19
  MIN_ARGS = 0
19
20
  MAX_ARGS = 1
20
- MIN_ABBREV = 'iv'.size
21
+ MIN_ABBREV = 'iv'.size
21
22
  NEED_STACK = true
22
23
  }
23
24
 
24
- def get_names
25
- @proc.debug_eval('self.instance_variables')
26
- end
25
+ def names
26
+ @proc.debug_eval('self.instance_variables.sort').map{|n| n.to_s}
27
+ end
28
+
29
+ def run_for_type(args, type, klass=nil)
30
+ suffix = klass ? " for #{klass.to_s}" : '' rescue ''
31
+ if args.size == 2
32
+ last_arg = args[-1]
33
+ if 0 == '--names'.index(last_arg)
34
+ if names.empty?
35
+ msg "No #{type} variables defined."
36
+ else
37
+ section "#{type.capitalize} variable names#{suffix}:"
38
+ width = settings[:maxwidth]
39
+ mess = Columnize::columnize(names,
40
+ @proc.settings[:maxwidth], ' ',
41
+ false, true, ' ' * 2).chomp
42
+ msg mess
43
+ end
44
+ elsif 'CFUNC' == @proc.frame.type
45
+ msg "Can't show #{type} names in a C call"
46
+ return
47
+ else
48
+ p last_arg
49
+ if names.member?(last_arg)
50
+ var_value =
51
+ @proc.safe_rep(@proc.debug_eval_no_errmsg(last_arg).inspect)
52
+ msg("#{last_arg} = #{var_value}", :code => true)
53
+ else
54
+ errmsg "No #{type} variable #{last_arg} defined#{suffix}."
55
+ end
56
+ end
57
+ elsif args.size == 1
58
+ if names.empty?
59
+ msg "No #{type} variables defined#{suffix}."
60
+ else
61
+ section "#{type.capitalize} variables#{suffix}:"
62
+ names.each do |var_name|
63
+ var_value =
64
+ @proc.safe_rep(@proc.debug_eval_no_errmsg(var_name).inspect)
65
+ msg("#{var_name} = #{var_value}", :code => true)
66
+ end
67
+ end
68
+ else
69
+ errmsg("Wrong number of arguments #{args.size}")
70
+ end
71
+ end
27
72
 
28
- def run(args)
29
- run_for_type(args, 'instance', @proc.debug_eval('self'))
30
- end
73
+ def run(args)
74
+ run_for_type(args, 'instance', @proc.debug_eval('self'))
75
+ end
31
76
  end
32
77
 
78
+ # Demo it.
33
79
  if __FILE__ == $0
34
- # Demo it.
35
- require_relative '../../mock'
36
- cmd =
37
- MockDebugger::subsub_setup(Trepan::Subcommand::InfoVariables,
38
- Trepan::Subcommand::InfoVariablesInstance)
39
- cmd.run(cmd.prefix)
40
- cmd.run(cmd.prefix + ['name'])
80
+ require_relative '../../../mock'
81
+ require_relative '../variables'
82
+ # cmd =
83
+ # MockDebugger::subsub_setup(Trepan::Subcommand::InfoVariables,
84
+ # Trepan::Subcommand::InfoVariablesInstance)
85
+ # cmd.run(cmd.prefix)
86
+ # cmd.run(cmd.prefix + ['name'])
41
87
  end
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- # Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
2
+ # Copyright (C) 2010-2011, 2015 Rocky Bernstein <rockyb@rubyforge.net>
3
3
  require 'columnize'
4
4
  require_relative '../../base/subsubcmd'
5
5
  require_relative '../../../../app/frame'
@@ -9,91 +9,172 @@ class Trepan::Subcommand::InfoVariablesLocals < Trepan::SubSubcommand
9
9
  Trepan::Util.suppress_warnings {
10
10
  Trepanning::Subcommand.set_name_prefix(__FILE__, self)
11
11
  HELP = <<-EOH
12
- #{CMD}
13
- #{CMD} [names]
12
+ **#{CMD}** [ **--names** | *local-number* ]
14
13
 
15
14
  Show local variables including parameters of the current stack frame.
16
- Normally for each which show both the name and value. If you just
17
- want a list of names add parameter 'names'.
15
+ Normally for each we show both the name and value. If you just
16
+ want a list of names add parameter `--names`. C functions don't
17
+ store parameter names, just the parameter positions starting from 0.
18
+
19
+ If you just want the value for a particular local number (and its name
20
+ if not in a C function), give that number. This is basically running
21
+ the VM command "getlocal *num*".
22
+
23
+ Examples:
24
+ ---------
25
+
26
+ info variables local
27
+ info variables local 0
28
+ info variables local --names
29
+
30
+ See Also:
31
+ ---------
32
+
33
+ `info variables`, `info globals`, `info variables constants`,
34
+ and `info variables class`
35
+
18
36
  EOH
19
37
  SHORT_HELP = 'Show local variables of the current stack frame'
20
38
  MIN_ARGS = 0
21
39
  MAX_ARGS = 1
22
- MIN_ABBREV = 'lo'.size
40
+ MIN_ABBREV = 'lo'.size
23
41
  NEED_STACK = true
24
42
  }
25
43
 
26
- def complete(prefix)
27
- ['name']
28
- end
44
+ def complete(prefix)
45
+ if @proc && @proc.frame
46
+ argc =
47
+ if 'CFUNC' == @proc.frame.type
48
+ @proc.frame.argc
49
+ else
50
+ iseq = @proc.frame.iseq
51
+ iseq.local_size - 2
52
+ end
53
+ ary = (0..argc).map{|i| i.to_s}
54
+ ['--names'] + ary
55
+ else
56
+ []
57
+ end
58
+ end
29
59
 
30
- def get_names
31
- iseq = @proc.frame.iseq
32
- 0.upto(iseq.local_size-2).map do
33
- |i|
34
- iseq.local_name(i)
60
+ def names
61
+ iseq = @proc.frame.iseq
62
+ 0.upto(iseq.local_size-2).map { |i| iseq.local_name(i) }
35
63
  end
36
- end
37
64
 
38
- def run_for_type(args, type, klass=nil)
39
- suffix = klass ? " for #{klass.to_s}" : '' rescue ''
40
- if args.size == 2
41
- if 0 == 'names'.index(args[-1].downcase)
42
- if 'CFUNC' == @proc.frame.type
43
- errmsg("info #{type} names not supported for C frames")
44
- else
45
- if names.empty?
46
- msg "No #{type} variables defined."
47
- else
48
- section "#{type.capitalize} variable names#{suffix}:"
49
- width = settings[:maxwidth]
50
- mess = Columnize::columnize(names,
51
- @proc.settings[:maxwidth], ' ',
52
- false, true, ' ' * 2).chomp
53
- msg mess
54
- end
55
- end
56
- else
57
- errmsg("unrecognized argument: #{args[-1]}")
58
- end
59
- elsif args.size == 1
60
- if 'CFUNC' == @proc.frame.type
61
- argc = @proc.frame.argc
62
- if argc > 0
63
- 1.upto(argc).each do |i|
64
- msg "#{i}: #{@proc.frame.sp(argc-i+3).inspect}"
65
- end
66
- else
67
- msg("No parameters in C call; showing other C locals is not supported.")
68
- end
69
- else
70
- if names.empty?
71
- msg "No #{type} variables defined#{suffix}."
65
+ def run_for_locals(args)
66
+ suffix = klass ? " for #{klass.to_s}" : '' rescue ''
67
+ frame = @proc.frame
68
+ suffix =
69
+ if frame.klass
70
+ " for #{Trepan::Frame::format_stack_call(frame,{})}"
71
+ else
72
+ ''
73
+ end
74
+ iseq = frame.iseq
75
+ c_frame = 'CFUNC' == frame.type
76
+ if args.size == 2
77
+ last_arg = args[-1]
78
+ argc =
79
+ if c_frame
80
+ frame.argc
81
+ else
82
+ iseq.local_size - 2
83
+ end
84
+ if 0 == '--names'.index(last_arg)
85
+ if c_frame
86
+ msg("Can't show parameter names in a C call")
87
+ return
88
+ end
89
+ if names.empty?
90
+ msg "No local variables defined."
91
+ else
92
+ section "Local variable names#{suffix}:"
93
+ width = settings[:maxwidth]
94
+ mess = Columnize::columnize(names,
95
+ @proc.settings[:maxwidth], ' ',
96
+ false, true, ' ' * 2).chomp
97
+ msg mess
98
+ end
99
+ else
100
+ if c_frame
101
+ num = @proc.get_an_int(last_arg,
102
+ :max_value => argc,
103
+ :min_value => 0,
104
+ )
105
+ return unless num
106
+ val = frame.getlocal(num)
107
+ msg("%d: %s (%s)" % [num, val.inspect, val.class],
108
+ :code => true)
109
+ return
110
+ elsif names.member?(last_arg)
111
+ val =
112
+ @proc.safe_rep(@proc.debug_eval_no_errmsg(last_arg))
113
+ msg("%s = %s (%s)" %
114
+ [last_arg, val.inspect, val.class], :code => true)
115
+ return
116
+ else
117
+ num = @proc.get_an_int(last_arg,
118
+ :max_value => iseq.local_size,
119
+ :min_value => 0,
120
+ )
121
+ return unless num
122
+ val = frame.getlocal(num)
123
+ if num >= 2
124
+ var_name = iseq.local_name(iseq.local_size-num)
125
+ mess = "%d: %s = %s (%s)" % [num, var_name,
126
+ val.inspect, val.class]
127
+ else
128
+ mess = "%d: %s (%s)" % [num, val.inspect, val.class]
129
+ end
130
+
131
+ msg(mess, :code => true)
132
+ return
133
+ end
134
+ end
135
+ elsif args.size == 1
136
+ if c_frame
137
+ argc = frame.argc
138
+ if argc > 0
139
+ 1.upto(argc).each do |i|
140
+ msg "#{i}: #{@proc.frame.sp(argc-i+3).inspect}"
141
+ end
142
+ else
143
+ msg("No parameters in C call")
144
+ end
145
+ return
146
+ else
147
+ if names.empty?
148
+ msg "No local variables defined#{suffix}."
149
+ else
150
+ section "Local variables#{suffix}:"
151
+ last = iseq.local_size
152
+ 2.upto(iseq.local_size) do |i|
153
+ name = iseq.local_name(last-i)
154
+ val = frame.getlocal(i)
155
+ msg("%d: %s = %s (%s)" %
156
+ [i, name, val.inspect, val.class],
157
+ :code => true)
158
+ end
159
+ end
160
+ end
72
161
  else
73
- section "#{type.capitalize} variables#{suffix}:"
74
- names.each do |var_name|
75
- var_value =
76
- @proc.safe_rep(@proc.debug_eval_no_errmsg(var_name).inspect)
77
- msg("#{var_name} = #{var_value}", :code => true)
78
- end
162
+ errmsg("Wrong number of arguments #{args.size}")
79
163
  end
80
- end
81
- else
82
- errmsg("Wrong number of arguments #{args.size}")
83
164
  end
84
- end
85
- def run(args)
86
- run_for_type(args, 'local', @proc.debug_eval('self'))
87
- end
165
+
166
+ def run(args)
167
+ run_for_locals(args)
168
+ end
88
169
  end
89
170
 
90
171
  if __FILE__ == $0
91
172
  # Demo it.
92
173
  require_relative '../../../mock'
93
174
  require_relative '../variables'
94
- cmd = MockDebugger::subsub_setup(Trepan::SubSubcommand::InfoVariables,
95
- Trepan::SubSubcommand::InfoVariablesLocals
96
- )
97
- cmd.run([])
98
- cmd.run(['name'])
175
+ # cmd = MockDebugger::subsub_setup(Trepan::SubSubcommand::InfoVariables,
176
+ # Trepan::SubSubcommand::InfoVariablesLocals
177
+ # )
178
+ # cmd.run([])
179
+ # cmd.run(['name'])
99
180
  end