trepanning 0.1.6 → 1.93.32
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.
- data/COPYING +57 -0
- data/ChangeLog +585 -736
- data/NEWS +26 -12
- data/README.md +62 -0
- data/Rakefile +15 -9
- data/app/breakpoint.rb +11 -12
- data/app/complete.rb +14 -14
- data/app/core.rb +34 -30
- data/app/default.rb +8 -7
- data/app/markdown.rb +191 -0
- data/app/options.rb +104 -99
- data/app/run.rb +9 -1
- data/app/util.rb +7 -7
- data/bin/trepan +7 -7
- data/interface.rb +0 -4
- data/interface/user.rb +11 -11
- data/io/input.rb +13 -13
- data/lib/trepanning.rb +30 -29
- data/processor.rb +40 -40
- data/processor/command.rb +13 -9
- data/processor/command/alias.rb +21 -15
- data/processor/command/backtrace.rb +27 -19
- data/processor/command/break.rb +24 -21
- data/processor/command/complete.rb +5 -2
- data/processor/command/condition.rb +14 -9
- data/processor/command/debug.rb +8 -8
- data/processor/command/down.rb +6 -6
- data/processor/command/edit.rb +4 -0
- data/processor/command/eval.rb +2 -2
- data/processor/command/exit.rb +12 -9
- data/processor/command/finish.rb +25 -23
- data/processor/command/frame.rb +30 -26
- data/processor/command/help.rb +203 -185
- data/processor/command/help/{command.txt → command.md} +21 -18
- data/processor/command/help/examples.md +20 -0
- data/processor/command/help/filename.md +46 -0
- data/processor/command/help/location.md +34 -0
- data/processor/command/help/suffixes.md +19 -0
- data/processor/command/info.rb +6 -4
- data/processor/command/info_subcmd/breakpoints.rb +13 -13
- data/processor/command/info_subcmd/files.rb +35 -31
- data/processor/command/info_subcmd/frame.rb +82 -33
- data/processor/command/info_subcmd/macro.rb +1 -1
- data/processor/command/info_subcmd/program.rb +8 -5
- data/processor/command/info_subcmd/registers.rb +15 -13
- data/processor/command/kill.rb +23 -17
- data/processor/command/list.rb +63 -56
- data/processor/command/macro.rb +45 -28
- data/processor/command/next.rb +29 -23
- data/processor/command/pp.rb +11 -9
- data/processor/command/pr.rb +10 -8
- data/processor/command/ps.rb +5 -5
- data/processor/command/quit.rb +24 -17
- data/processor/command/raise.rb +6 -6
- data/processor/command/reload.rb +9 -2
- data/processor/command/reload_subcmd/command.rb +4 -4
- data/processor/command/restart.rb +9 -4
- data/processor/command/save.rb +9 -9
- data/processor/command/server.rb +18 -17
- data/processor/command/set.rb +8 -6
- data/processor/command/set_subcmd/confirm.rb +15 -2
- data/processor/command/set_subcmd/different.rb +7 -5
- data/processor/command/set_subcmd/highlight.rb +14 -3
- data/processor/command/set_subcmd/pc.rb +62 -0
- data/processor/command/set_subcmd/sp.rb +8 -2
- data/processor/command/shell.rb +25 -23
- data/processor/command/show.rb +9 -7
- data/processor/command/show_subcmd/confirm.rb +12 -1
- data/processor/command/show_subcmd/highlight.rb +13 -3
- data/processor/command/source.rb +27 -26
- data/processor/command/step.rb +52 -43
- data/processor/command/tbreak.rb +9 -4
- data/processor/command/unalias.rb +9 -7
- data/processor/command/undisplay.rb +11 -7
- data/processor/command/up.rb +18 -13
- data/processor/command/watchg.rb +20 -17
- data/processor/complete.rb +120 -0
- data/processor/default.rb +47 -43
- data/processor/list.rb +23 -6
- data/processor/load_cmds.rb +25 -105
- data/processor/location.rb +104 -96
- data/processor/mock.rb +12 -12
- data/processor/msg.rb +61 -52
- data/processor/validate.rb +36 -27
- data/test/data/fname-with-blank.right +0 -1
- data/test/data/trace-mingw.right +28 -0
- data/test/data/trace.right +0 -2
- data/test/functional/test-raise.rb +3 -0
- data/test/integration/helper.rb +16 -16
- data/test/integration/test-debugger-stop.rb +8 -2
- data/test/integration/test-quit.rb +16 -15
- data/test/integration/test-trace.rb +19 -10
- data/test/unit/cmd-helper.rb +4 -1
- data/test/unit/test-app-complete.rb +3 -1
- data/test/unit/test-app-options.rb +7 -1
- data/test/unit/test-app-run.rb +9 -1
- data/test/unit/test-cmd-alias.rb +1 -1
- data/test/unit/test-cmd-edit.rb +2 -0
- data/test/unit/test-cmd-help.rb +10 -5
- data/test/unit/test-cmd-parse_list_cmd.rb +3 -3
- data/test/unit/test-completion.rb +2 -2
- data/test/unit/test-proc-default.rb +34 -0
- data/trepanning.gemspec +15 -14
- metadata +70 -44
- data/README.textile +0 -50
- data/processor/command/help/examples.txt +0 -16
- data/processor/command/help/filename.txt +0 -40
- data/processor/command/help/location.txt +0 -37
- data/processor/command/help/suffixes.txt +0 -17
- data/processor/command/info_subcmd/registers_subcmd/dfp.rb +0 -28
- data/processor/command/info_subcmd/registers_subcmd/lfp.rb +0 -47
- data/processor/command/nocache.rb +0 -32
- data/processor/command/parsetree.rb +0 -56
data/processor/command/help.rb
CHANGED
@@ -1,75 +1,84 @@
|
|
1
|
-
# Copyright (C) 2010,
|
1
|
+
# Copyright (C) 2010-2011, 2013, 2015 Rocky Bernstein <rockyb@rubyforge.net>
|
2
2
|
require_relative '../command'
|
3
3
|
require_relative '../../app/complete'
|
4
|
+
|
4
5
|
class Trepan::Command::HelpCommand < Trepan::Command
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
unless defined?(HELP)
|
7
|
+
NAME = File.basename(__FILE__, '.rb')
|
8
|
+
HELP = <<-HELP
|
9
|
+
**#{NAME}** [*command* [*subcommand*]|*regexp*]
|
9
10
|
|
10
11
|
Without argument, print the list of available debugger commands.
|
11
12
|
|
12
13
|
When an argument is given, it is first checked to see if it is command
|
13
|
-
name.
|
14
|
-
|
15
|
-
If the environment variable $PAGER is defined, the file is
|
16
|
-
piped through that command. You'll notice this only for long help
|
17
|
-
output.
|
14
|
+
name. For example, `help up` gives help on the `up` debugger command.
|
18
15
|
|
19
|
-
Some commands like
|
16
|
+
Some commands like `info`, `set`, and `show` can accept an
|
20
17
|
additional subcommand to give help just about that particular
|
21
|
-
subcommand. For example
|
18
|
+
subcommand. For example `help info line` give help about the
|
22
19
|
info line command.
|
23
20
|
HELP
|
24
21
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
22
|
+
ALIASES = %w(?)
|
23
|
+
CATEGORIES = {
|
24
|
+
'breakpoints' => 'Making the program stop at certain points',
|
25
|
+
'data' => 'Examining data',
|
26
|
+
'files' => 'Specifying and examining files',
|
27
|
+
'running' => 'Running the program',
|
28
|
+
'status' => 'Status inquiries',
|
29
|
+
'support' => 'Support facilities',
|
30
|
+
'stack' => 'Examining the call stack',
|
31
|
+
'syntax' => 'Debugger command syntax'
|
32
|
+
}
|
33
|
+
CATEGORY = 'support'
|
34
|
+
NEED_STACK = false
|
35
|
+
SHORT_HELP = 'Print commands or give help for command(s)'
|
36
|
+
|
37
|
+
ROOT_DIR = File.dirname(RubyVM::Frame.current.source_container[1])
|
38
|
+
HELP_DIR = File.join(ROOT_DIR, 'help')
|
39
|
+
MARKDOWN_EXTENSION='.md'
|
40
|
+
end
|
44
41
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
42
|
+
def command_names(proc)
|
43
|
+
if proc.frame
|
44
|
+
proc.commands.keys
|
45
|
+
else
|
46
|
+
proc.commands.select {
|
47
|
+
|key, cmd|
|
48
|
+
!cmd.class.const_get(:NEED_STACK)
|
49
|
+
}.keys
|
50
|
+
end.sort
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
def complete(prefix)
|
55
|
+
matches = Trepan::Complete.complete_token(CATEGORIES.keys + %w(* all) +
|
56
|
+
command_names(@proc), prefix)
|
57
|
+
aliases = Trepan::Complete.complete_token_filtered(@proc.aliases, prefix,
|
58
|
+
matches)
|
59
|
+
(matches + aliases).sort
|
63
60
|
end
|
64
|
-
end
|
65
61
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
62
|
+
def complete_token_with_next(prefix)
|
63
|
+
complete(prefix).map do |cmd|
|
64
|
+
[cmd, @proc.commands.member?(cmd) ? @proc.commands[cmd] : nil]
|
65
|
+
# complete_method =
|
66
|
+
# if 'syntax' == cmd
|
67
|
+
# Syntax.new(syntax_files)
|
68
|
+
# else
|
69
|
+
# @proc.commands.member?(cmd) ? @proc.commands[cmd] : nil
|
70
|
+
# end
|
71
|
+
# [cmd, complete_method]
|
72
|
+
end
|
71
73
|
end
|
72
|
-
|
74
|
+
|
75
|
+
# List the command categories and a short description of each.
|
76
|
+
def list_categories
|
77
|
+
section 'Help classes:'
|
78
|
+
CATEGORIES.keys.sort.each do |cat|
|
79
|
+
msg("%-13s -- %s" % [cat, CATEGORIES[cat]])
|
80
|
+
end
|
81
|
+
final_msg = '
|
73
82
|
Type "help" followed by a class name for a list of help items in that class.
|
74
83
|
Type "help aliases" for a list of current aliases.
|
75
84
|
Type "help macros" for a list of current macros.
|
@@ -79,150 +88,159 @@ Type "help REGEXP" for the list of commands matching /^#{REGEXP}/.
|
|
79
88
|
Type "help CLASS *" for the list of all commands in class CLASS.
|
80
89
|
Type "help" followed by a command name for full documentation.
|
81
90
|
'
|
82
|
-
msg(final_msg)
|
91
|
+
msg(final_msg)
|
83
92
|
end
|
84
93
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
94
|
+
# This method runs the command
|
95
|
+
def run(args) # :nodoc
|
96
|
+
if args.size > 1
|
97
|
+
cmd_name = args[1]
|
98
|
+
if cmd_name == '*'
|
99
|
+
section 'Currently-available command names:'
|
100
|
+
msg columnize_commands(command_names(@proc))
|
101
|
+
show_aliases unless @proc.aliases.empty?
|
102
|
+
show_macros unless @proc.macros.empty?
|
103
|
+
elsif cmd_name =~ /^aliases$/i
|
104
|
+
show_aliases
|
105
|
+
elsif cmd_name =~ /^macros$/i
|
106
|
+
show_macros
|
107
|
+
elsif cmd_name =~ /^syntax$/i
|
108
|
+
show_command_syntax(args)
|
109
|
+
elsif cmd_name =~ /^all$/i
|
110
|
+
CATEGORIES.sort.each do |category|
|
111
|
+
show_category(category[0], [])
|
112
|
+
msg('')
|
113
|
+
end
|
114
|
+
elsif CATEGORIES.member?(cmd_name)
|
115
|
+
show_category(args[1], args[2..-1])
|
116
|
+
elsif @proc.commands.member?(cmd_name) or @proc.aliases.member?(cmd_name)
|
117
|
+
real_name =
|
118
|
+
if @proc.commands.member?(cmd_name)
|
119
|
+
cmd_name
|
120
|
+
else
|
121
|
+
@proc.aliases[cmd_name]
|
122
|
+
end
|
123
|
+
cmd_obj = @proc.commands[real_name]
|
124
|
+
help_text =
|
125
|
+
cmd_obj.respond_to?(:help) ? cmd_obj.help(args) :
|
126
|
+
cmd_obj.class.const_get(:HELP)
|
127
|
+
if help_text
|
128
|
+
# FIXME: until we get the entire help cut over to markdown,
|
129
|
+
# we'll determine whether to use it or not based on whether the first
|
130
|
+
# character is '*'.
|
131
|
+
if help_text[0..0] == '*'
|
132
|
+
markdown help_text
|
133
|
+
else
|
134
|
+
msg(help_text)
|
135
|
+
end
|
136
|
+
if cmd_obj.class.constants.member?(:ALIASES) and
|
137
|
+
args.size == 2
|
138
|
+
markdown("**Aliases:** " +
|
139
|
+
"#{cmd_obj.class.const_get(:ALIASES).join(', ')}")
|
140
|
+
end
|
141
|
+
end
|
142
|
+
elsif @proc.macros.member?(cmd_name)
|
143
|
+
msg "#{cmd_name} is a macro which expands to:"
|
144
|
+
msg " #{@proc.macros[cmd_name]}", {:unlimited => true}
|
145
|
+
else
|
146
|
+
matches = @proc.commands.keys.grep(/^#{cmd_name}/).sort rescue []
|
147
|
+
if matches.empty?
|
148
|
+
errmsg("No commands found matching /^#{cmd_name}/. Try \"help\".")
|
149
|
+
else
|
150
|
+
section "Command names matching /^#{cmd_name}/:"
|
151
|
+
msg columnize_commands(matches.sort)
|
152
|
+
end
|
153
|
+
end
|
132
154
|
else
|
133
|
-
|
134
|
-
msg columnize_commands(matches.sort)
|
155
|
+
list_categories
|
135
156
|
end
|
136
|
-
end
|
137
|
-
else
|
138
|
-
list_categories
|
139
157
|
end
|
140
|
-
end
|
141
158
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
end
|
146
|
-
|
147
|
-
# Show short help for all commands in `category'.
|
148
|
-
def show_category(category, args)
|
149
|
-
|
150
|
-
if args.size == 1 && args[0] == '*'
|
151
|
-
section "Commands in class %s:" % category
|
152
|
-
|
153
|
-
cmds = @proc.commands.keys.select do |cmd_name|
|
154
|
-
category == @proc.commands[cmd_name].category
|
155
|
-
end.sort
|
156
|
-
width = settings[:maxwidth]
|
157
|
-
msg columnize_commands(cmds)
|
158
|
-
return
|
159
|
+
def show_aliases
|
160
|
+
section 'All alias names:'
|
161
|
+
msg columnize_commands(@proc.aliases.keys.sort)
|
159
162
|
end
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
163
|
+
|
164
|
+
# Show short help for all commands in `category'.
|
165
|
+
def show_category(category, args)
|
166
|
+
|
167
|
+
if args.size == 1 && args[0] == '*'
|
168
|
+
section "Commands in class %s:" % category
|
169
|
+
|
170
|
+
cmds = @proc.commands.keys.select do |cmd_name|
|
171
|
+
category == @proc.commands[cmd_name].category
|
172
|
+
end.sort
|
173
|
+
width = settings[:maxwidth]
|
174
|
+
msg columnize_commands(cmds)
|
175
|
+
return
|
176
|
+
end
|
177
|
+
|
178
|
+
section "Command class: %s" % category
|
179
|
+
@proc.commands.keys.sort.each do |name|
|
180
|
+
next if category != @proc.commands[name].category
|
181
|
+
msg("%-13s -- %s" % [name, @proc.commands[name].short_help])
|
182
|
+
end
|
165
183
|
end
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
184
|
+
|
185
|
+
def syntax_files
|
186
|
+
@syntax_files ||= Dir.glob(File.join(HELP_DIR, "*#{MARKDOWN_EXTENSION}")).map do |name|
|
187
|
+
basename = File.basename(name, MARKDOWN_EXTENSION)
|
188
|
+
end
|
171
189
|
end
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
else
|
184
|
-
args[2..-1].each do |name|
|
185
|
-
if syntax_files.member?(name)
|
186
|
-
@syntax_help ||= {}
|
187
|
-
@syntax_help[name] =
|
188
|
-
File.open(File.join(HELP_DIR, "#{name}.txt")).readlines[2..-1].join
|
189
|
-
section "Debugger syntax for a #{name}:"
|
190
|
-
msg @syntax_help[name]
|
190
|
+
|
191
|
+
def show_command_syntax(args)
|
192
|
+
if args.size == 2
|
193
|
+
@syntax_summary_help ||= {}
|
194
|
+
section "List of syntax help"
|
195
|
+
syntax_files.each do |name|
|
196
|
+
@syntax_summary_help[name] ||=
|
197
|
+
File.open(File.join(HELP_DIR, "#{name}#{MARKDOWN_EXTENSION}"))
|
198
|
+
.readline.chomp
|
199
|
+
msg " %-8s -- %s" % [name, @syntax_summary_help[name]]
|
200
|
+
end
|
191
201
|
else
|
192
|
-
|
202
|
+
args[2..-1].each do |name|
|
203
|
+
if syntax_files.member?(name)
|
204
|
+
@syntax_help ||= {}
|
205
|
+
@syntax_help[name] =
|
206
|
+
File.open(File.join(HELP_DIR, "#{name}#{MARKDOWN_EXTENSION}"))
|
207
|
+
.readlines.join('')
|
208
|
+
markdown @syntax_help[name]
|
209
|
+
else
|
210
|
+
errmsg "No syntax help for #{name}"
|
211
|
+
end
|
212
|
+
end
|
193
213
|
end
|
194
|
-
end
|
195
214
|
end
|
196
|
-
end
|
197
215
|
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
216
|
+
def show_macros
|
217
|
+
section 'All macro names:'
|
218
|
+
msg columnize_commands(@proc.macros.keys.sort)
|
219
|
+
end
|
202
220
|
|
203
221
|
end
|
204
222
|
|
205
223
|
if __FILE__ == $0
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
224
|
+
# Demo it.
|
225
|
+
require_relative '../mock'
|
226
|
+
dbgr, cmd = MockDebugger::setup
|
227
|
+
|
228
|
+
cmd.run %W(#{cmd.name} help)
|
229
|
+
puts '=' * 40
|
230
|
+
cmd.run %W(#{cmd.name} *)
|
231
|
+
puts '=' * 40
|
232
|
+
cmd.run %W(#{cmd.name} fdafsasfda)
|
233
|
+
puts '=' * 40
|
234
|
+
cmd.run [cmd.name]
|
235
|
+
puts '=' * 40
|
236
|
+
cmd.run %W(#{cmd.name} support)
|
237
|
+
puts '=' * 40
|
238
|
+
cmd.run %W(#{cmd.name} support *)
|
239
|
+
puts '=' * 40
|
240
|
+
cmd.run %W(#{cmd.name} s.*)
|
241
|
+
puts '=' * 40
|
242
|
+
cmd.run %W(#{cmd.name} s<>)
|
243
|
+
puts '=' * 40
|
244
|
+
p cmd.complete('br')
|
245
|
+
p cmd.complete('un')
|
228
246
|
end
|
@@ -1,20 +1,21 @@
|
|
1
1
|
Overall Debugger Command Syntax
|
2
|
+
===============================
|
2
3
|
|
3
|
-
If the first non-blank character of a line starts with
|
4
|
-
the command is ignored.
|
4
|
+
If the first non-blank character of a line starts with `#`,
|
5
|
+
the command is ignored.
|
5
6
|
|
6
|
-
If a line starts with
|
7
|
+
If a line starts with `!` in column one, the line is *eval*'d.
|
7
8
|
|
8
|
-
If the command you want Ruby to eval
|
9
|
-
after the first
|
9
|
+
If the command you want Ruby to eval starts with `!`, add that
|
10
|
+
after the first `!` or start the line with a space.
|
10
11
|
|
11
|
-
Commands are split at whereever
|
12
|
+
Commands are split at whereever `;;` appears. This process disregards
|
12
13
|
any quotes or other symbols that have meaning in Ruby. The strings
|
13
|
-
after the leading command string are put back on a command queue.
|
14
|
+
after the leading command string are put back on a command queue.
|
14
15
|
|
15
16
|
Within a single command, tokens are then white-space split. Again,
|
16
17
|
this process disregards quotes or symbols that have meaning in Ruby.
|
17
|
-
Some commands like
|
18
|
+
Some commands like `eval`, `macro`, and `break` have access to the
|
18
19
|
untokenized string entered and make use of that rather than the
|
19
20
|
tokenized list.
|
20
21
|
|
@@ -23,9 +24,9 @@ omitted depending on early success or some debugger settings:
|
|
23
24
|
|
24
25
|
1. The leading token is first looked up in the macro table. If it is in
|
25
26
|
the table, the expansion is replaces the current command and possibly
|
26
|
-
other commands pushed onto a command queue. See
|
27
|
-
help on how to define macros, and
|
28
|
-
definitions.
|
27
|
+
other commands pushed onto a command queue. See `help macros` for
|
28
|
+
help on how to define macros, and `info macro` for current macro
|
29
|
+
definitions.
|
29
30
|
|
30
31
|
2. The leading token is next looked up in the debugger alias table and
|
31
32
|
the name may be substituted there. See "help alias" for how to define
|
@@ -37,15 +38,15 @@ are dispatched to that command. Otherwise, we may check to see the the
|
|
37
38
|
token is a unique prefix of a valid command. For example, "dis" is not
|
38
39
|
a unique prefix because there are both "display" and "disable"
|
39
40
|
commands, but "disp" is a unique prefix. You can allow or disallow
|
40
|
-
abbreviations for commands using
|
41
|
-
abbreviations
|
41
|
+
abbreviations for commands using `set abbrev`. The default puts
|
42
|
+
abbreviations on.
|
42
43
|
|
43
44
|
4. If after all of the above, we still don't find a command, the line
|
44
45
|
may be evaluated as a Ruby statement in the current context of the
|
45
46
|
program at the point it is stoppped. However this is done only if
|
46
|
-
|
47
|
+
`autoeval` is on. It is on by default.
|
47
48
|
|
48
|
-
If
|
49
|
+
If `auto eval` is not set on, or if running the Ruby statement
|
49
50
|
produces an error, we display an error message that the entered string
|
50
51
|
is "undefined".
|
51
52
|
|
@@ -53,6 +54,8 @@ If you want irb-like command-processing, it's possible to go into an
|
|
53
54
|
irb shell with the "irb" command. It is also possible to arrange going
|
54
55
|
into an irb shell every time you enter the debugger.
|
55
56
|
|
56
|
-
See also:
|
57
|
-
|
58
|
-
|
57
|
+
See also:
|
58
|
+
---------
|
59
|
+
|
60
|
+
* `help syntax examples`
|
61
|
+
* `help syntax suffixes`
|