trepanning 1.93.35 → 2.15.33

Sign up to get free protection for your applications and to get access to all the features.
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