debugger 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +4 -0
- data/README.md +9 -3
- data/debugger.gemspec +1 -1
- data/ext/ruby_debug/192/ruby_debug.c +21 -9
- data/ext/ruby_debug/193/ruby_debug.c +15 -5
- data/lib/debugger/test.rb +6 -0
- data/{test/support → lib/debugger/test}/breakpoint.rb +0 -0
- data/{test/support → lib/debugger/test}/context.rb +0 -0
- data/{test/support → lib/debugger/test}/matchers.rb +0 -0
- data/{test/support → lib/debugger/test}/mocha_extensions.rb +1 -1
- data/lib/debugger/test/printer_helpers.rb +8 -0
- data/{test/support → lib/debugger/test}/processor.rb +0 -0
- data/{test/support → lib/debugger/test}/test_dsl.rb +22 -2
- data/{test/support → lib/debugger/test}/test_interface.rb +4 -0
- data/lib/debugger/version.rb +1 -1
- data/lib/ruby-debug.rb +4 -1
- data/lib/ruby-debug/command.rb +18 -6
- data/lib/ruby-debug/commands/breakpoints.rb +27 -29
- data/lib/ruby-debug/commands/condition.rb +7 -2
- data/lib/ruby-debug/commands/continue.rb +1 -2
- data/lib/ruby-debug/commands/control.rb +8 -9
- data/lib/ruby-debug/commands/display.rb +7 -15
- data/lib/ruby-debug/commands/edit.rb +6 -6
- data/lib/ruby-debug/commands/enable.rb +6 -7
- data/lib/ruby-debug/commands/eval.rb +1 -3
- data/lib/ruby-debug/commands/frame.rb +72 -101
- data/lib/ruby-debug/commands/info.rb +8 -14
- data/lib/ruby-debug/commands/irb.rb +1 -1
- data/lib/ruby-debug/commands/jump.rb +6 -6
- data/lib/ruby-debug/commands/kill.rb +0 -1
- data/lib/ruby-debug/commands/list.rb +4 -4
- data/lib/ruby-debug/commands/method.rb +8 -11
- data/lib/ruby-debug/commands/quit.rb +1 -1
- data/lib/ruby-debug/commands/reload.rb +1 -1
- data/lib/ruby-debug/commands/save.rb +1 -1
- data/lib/ruby-debug/commands/set.rb +10 -15
- data/lib/ruby-debug/commands/show.rb +28 -42
- data/lib/ruby-debug/commands/skip.rb +1 -1
- data/lib/ruby-debug/commands/source.rb +1 -1
- data/lib/ruby-debug/commands/start.rb +26 -0
- data/lib/ruby-debug/commands/threads.rb +29 -18
- data/lib/ruby-debug/commands/tmate.rb +1 -1
- data/lib/ruby-debug/commands/trace.rb +6 -7
- data/lib/ruby-debug/commands/variables.rb +36 -19
- data/lib/ruby-debug/helper.rb +5 -5
- data/lib/ruby-debug/interface.rb +15 -3
- data/lib/ruby-debug/printers/base.rb +58 -0
- data/lib/ruby-debug/printers/plain.rb +41 -0
- data/lib/ruby-debug/printers/texts/base.yml +146 -0
- data/lib/ruby-debug/printers/texts/plain.yml +60 -0
- data/lib/ruby-debug/processor.rb +56 -47
- data/test/breakpoints_test.rb +43 -54
- data/test/conditions_test.rb +18 -6
- data/test/continue_test.rb +1 -1
- data/test/display_test.rb +11 -11
- data/test/edit_test.rb +1 -2
- data/test/eval_test.rb +5 -6
- data/test/finish_test.rb +1 -1
- data/test/frame_test.rb +29 -27
- data/test/help_test.rb +0 -1
- data/test/info_test.rb +10 -14
- data/test/irb_test.rb +0 -1
- data/test/jump_test.rb +21 -2
- data/test/method_test.rb +3 -3
- data/test/new/printers/plain_test.rb +84 -0
- data/test/reload_test.rb +2 -2
- data/test/restart_test.rb +1 -2
- data/test/set_test.rb +8 -7
- data/test/show_test.rb +22 -22
- data/test/source_test.rb +1 -1
- data/test/test_helper.rb +2 -1
- data/test/thread_test.rb +11 -13
- data/test/trace_test.rb +7 -7
- data/test/variables_test.rb +33 -15
- metadata +20 -12
@@ -1,21 +1,34 @@
|
|
1
1
|
module Debugger
|
2
2
|
module ThreadFunctions # :nodoc:
|
3
|
-
def display_context(
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
3
|
+
def display_context(context, should_show_top_frame = true)
|
4
|
+
print pr("thread.context", thread_arguments(context, should_show_top_frame))
|
5
|
+
end
|
6
|
+
|
7
|
+
def thread_arguments(context, should_show_top_frame = true)
|
8
|
+
is_current = context.thread == Thread.current
|
9
|
+
status_flag = if context.suspended?
|
10
|
+
"$"
|
11
|
+
else
|
12
|
+
is_current ? '+' : ' '
|
12
13
|
end
|
13
|
-
|
14
|
+
debug_flag = context.ignored? ? '!' : ' '
|
15
|
+
file_line = if context.stack_size > 0 && should_show_top_frame
|
16
|
+
"#{context.frame_file(0)}:#{context.frame_line(0)}"
|
17
|
+
end
|
18
|
+
{
|
19
|
+
status_flag: status_flag,
|
20
|
+
debug_flag: debug_flag,
|
21
|
+
id: context.thnum,
|
22
|
+
thread: context.thread.inspect,
|
23
|
+
file_line: file_line,
|
24
|
+
status: context.thread.status,
|
25
|
+
current: is_current ? "yes" : "no"
|
26
|
+
}
|
14
27
|
end
|
15
28
|
|
16
29
|
def parse_thread_num(subcmd, arg)
|
17
30
|
if '' == arg
|
18
|
-
errmsg "
|
31
|
+
errmsg pr("thread.errors.no_number", subcmd: subcmd)
|
19
32
|
nil
|
20
33
|
else
|
21
34
|
thread_num = get_int(arg, "thread #{subcmd}", 1)
|
@@ -29,11 +42,11 @@ module Debugger
|
|
29
42
|
return nil unless c
|
30
43
|
case
|
31
44
|
when nil == c
|
32
|
-
errmsg "
|
45
|
+
errmsg pr("thread.errors.no_thread")
|
33
46
|
when @state.context == c
|
34
|
-
errmsg "
|
47
|
+
errmsg pr("thread.errors.current_thread")
|
35
48
|
when c.ignored?
|
36
|
-
errmsg "
|
49
|
+
errmsg pr("thread.errors.wrong_action", subcmd: subcmd, arg: arg)
|
37
50
|
else # Everything is okay
|
38
51
|
return c
|
39
52
|
end
|
@@ -49,9 +62,7 @@ module Debugger
|
|
49
62
|
end
|
50
63
|
|
51
64
|
def execute
|
52
|
-
|
53
|
-
display_context(c)
|
54
|
-
end
|
65
|
+
print prc("thread.context", Debugger.contexts.sort_by(&:thnum)) { |context, _| thread_arguments(context) }
|
55
66
|
end
|
56
67
|
|
57
68
|
class << self
|
@@ -109,7 +120,7 @@ module Debugger
|
|
109
120
|
c = parse_thread_num_for_cmd("thread resume", @match[1])
|
110
121
|
return unless c
|
111
122
|
if !c.thread.stop?
|
112
|
-
|
123
|
+
errmsg pr("thread.errors.already_running")
|
113
124
|
return
|
114
125
|
end
|
115
126
|
c.resume
|
@@ -9,7 +9,7 @@ module Debugger
|
|
9
9
|
if @match[1]
|
10
10
|
frm_n = @match[1].to_i
|
11
11
|
if frm_n > @state.context.stack_size || frm_n == 0
|
12
|
-
print "
|
12
|
+
print pr("tmate.errors.wrong_frame")
|
13
13
|
return
|
14
14
|
end
|
15
15
|
file, line = @state.context.frame_file(frm_n-1), @state.context.frame_line(frm_n-1)
|
@@ -12,31 +12,30 @@ module Debugger
|
|
12
12
|
onoff = 'on' == @match[1]
|
13
13
|
if @match[2]
|
14
14
|
Debugger.tracing = onoff
|
15
|
-
print "
|
15
|
+
print pr("trace.messages.all_threads", status: onoff ? 'on' : 'off')
|
16
16
|
else
|
17
17
|
Debugger.current_context.tracing = onoff
|
18
|
-
print "
|
18
|
+
print pr("trace.messages.current_thread", status: onoff ? 'on' : 'off')
|
19
19
|
end
|
20
20
|
elsif @match[1] =~ /var(?:iable)?/
|
21
21
|
varname=@match[2]
|
22
22
|
if debug_eval("defined?(#{varname})")
|
23
23
|
if @match[3] && @match[3] !~ /(:?no)?stop/
|
24
|
-
errmsg("
|
24
|
+
errmsg pr("trace.errors.wrong_var_subcommand", subcmd: @match[3])
|
25
25
|
else
|
26
26
|
dbg_cmd = if @match[3] && (@match[3] !~ /nostop/)
|
27
27
|
'debugger' else '' end
|
28
28
|
end
|
29
29
|
eval("
|
30
30
|
trace_var(:#{varname}) do |val|
|
31
|
-
print
|
31
|
+
print pr('trace.trace', name: '#{varname}', value: val)
|
32
32
|
#{dbg_cmd}
|
33
33
|
end")
|
34
34
|
else
|
35
|
-
errmsg "
|
35
|
+
errmsg pr("trace.errors.var_is_not_global", name: varname)
|
36
36
|
end
|
37
37
|
else
|
38
|
-
errmsg("
|
39
|
-
@match[1])
|
38
|
+
errmsg pr("trace.errors.wrong_subcommand", subcmd: @match[1])
|
40
39
|
end
|
41
40
|
end
|
42
41
|
|
@@ -1,8 +1,7 @@
|
|
1
1
|
module Debugger
|
2
2
|
module VarFunctions # :nodoc:
|
3
3
|
def var_list(ary, b = get_binding)
|
4
|
-
ary.sort
|
5
|
-
for v in ary
|
4
|
+
vars = ary.sort.map do |v|
|
6
5
|
begin
|
7
6
|
s = debug_eval(v.to_s, b).inspect
|
8
7
|
rescue
|
@@ -15,13 +14,17 @@ module Debugger
|
|
15
14
|
if s.size > self.class.settings[:width]
|
16
15
|
s[self.class.settings[:width]-3 .. -1] = "..."
|
17
16
|
end
|
18
|
-
|
17
|
+
[v, s]
|
19
18
|
end
|
19
|
+
print prv(vars, 'instance')
|
20
20
|
end
|
21
21
|
def var_class_self
|
22
22
|
obj = debug_eval('self')
|
23
23
|
var_list(obj.class.class_variables, get_binding)
|
24
24
|
end
|
25
|
+
def var_global
|
26
|
+
var_list(global_variables.reject { |v| [:$=, :$KCODE, :$-K].include?(v) })
|
27
|
+
end
|
25
28
|
end
|
26
29
|
|
27
30
|
# Implements the debugger 'var class' command.
|
@@ -59,15 +62,13 @@ module Debugger
|
|
59
62
|
def execute
|
60
63
|
obj = debug_eval(@match.post_match)
|
61
64
|
if obj.kind_of? Module
|
62
|
-
constants = debug_eval("#{@match.post_match}.constants")
|
63
|
-
|
64
|
-
|
65
|
-
next if c =~ /SCRIPT/
|
66
|
-
value = obj.const_get(c) rescue "ERROR: #{$!}"
|
67
|
-
print " %s => %p\n", c, value
|
65
|
+
constants = debug_eval("#{@match.post_match}.constants").sort.reject { |c| c =~ /SCRIPT/ }.map do |constant|
|
66
|
+
value = obj.const_get(constant) rescue "ERROR: #{$!}"
|
67
|
+
[constant, value]
|
68
68
|
end
|
69
|
+
print prv(constants, "constant")
|
69
70
|
else
|
70
|
-
|
71
|
+
errmsg pr("variable.errors.not_class_module", object: @match.post_match)
|
71
72
|
end
|
72
73
|
end
|
73
74
|
|
@@ -90,7 +91,7 @@ module Debugger
|
|
90
91
|
end
|
91
92
|
|
92
93
|
def execute
|
93
|
-
|
94
|
+
var_global
|
94
95
|
end
|
95
96
|
|
96
97
|
class << self
|
@@ -108,11 +109,12 @@ module Debugger
|
|
108
109
|
|
109
110
|
class VarInstanceCommand < Command # :nodoc:
|
110
111
|
def regexp
|
111
|
-
|
112
|
+
# id will be read as first match, name as post match
|
113
|
+
/^\s*v(?:ar)?\s+ins(?:tance)?\s*((?:[\\+-]0x)[\dabcdef]+)?/
|
112
114
|
end
|
113
115
|
|
114
116
|
def execute
|
115
|
-
obj =
|
117
|
+
obj = get_obj(@match)
|
116
118
|
var_list(obj.instance_variables, obj.instance_eval{binding()})
|
117
119
|
end
|
118
120
|
|
@@ -123,10 +125,25 @@ module Debugger
|
|
123
125
|
|
124
126
|
def help(cmd)
|
125
127
|
%{
|
126
|
-
v[ar] i[nstance] <object>\tshow instance variables of object
|
128
|
+
v[ar] i[nstance] <object>\tshow instance variables of object. You may pass object id's hex as well.
|
127
129
|
}
|
128
130
|
end
|
129
131
|
end
|
132
|
+
|
133
|
+
private
|
134
|
+
|
135
|
+
def get_obj(match)
|
136
|
+
obj = if match[1]
|
137
|
+
begin
|
138
|
+
ObjectSpace._id2ref(match[1].hex)
|
139
|
+
rescue RangeError
|
140
|
+
errmsg "Unknown object id : %s" % match[1]
|
141
|
+
nil
|
142
|
+
end
|
143
|
+
else
|
144
|
+
debug_eval(match.post_match.empty? ? 'self' : match.post_match)
|
145
|
+
end
|
146
|
+
end
|
130
147
|
end
|
131
148
|
|
132
149
|
# Implements the debugger 'var local' command.
|
@@ -136,11 +153,11 @@ module Debugger
|
|
136
153
|
end
|
137
154
|
|
138
155
|
def execute
|
139
|
-
locals =
|
140
|
-
_self = @state.context.frame_self(@state.frame_pos)
|
141
|
-
locals.
|
142
|
-
|
143
|
-
|
156
|
+
locals = []
|
157
|
+
_self = @state.context.frame_self(@state.frame_pos)
|
158
|
+
locals << ['self', _self] unless _self.to_s == "main"
|
159
|
+
locals += @state.context.frame_locals(@state.frame_pos).sort.map { |key, value| [key, value] }
|
160
|
+
print prv(locals, 'instance')
|
144
161
|
end
|
145
162
|
|
146
163
|
class << self
|
data/lib/ruby-debug/helper.rb
CHANGED
@@ -11,15 +11,15 @@ module Debugger
|
|
11
11
|
begin
|
12
12
|
int = Integer(str)
|
13
13
|
if min and int < min
|
14
|
-
print "
|
14
|
+
print Debugger.printer.print("parse.errors.int.too_low", cmd: cmd, str: str, min: min)
|
15
15
|
return nil
|
16
16
|
elsif max and int > max
|
17
|
-
print "
|
17
|
+
print Debugger.printer.print("parse.errors.int.too_high", cmd: cmd, str: str, max: max)
|
18
18
|
return nil
|
19
19
|
end
|
20
20
|
return int
|
21
21
|
rescue
|
22
|
-
print "
|
22
|
+
print Debugger.printer.print("parse.errors.int.not_number", cmd: cmd, str: str)
|
23
23
|
return nil
|
24
24
|
end
|
25
25
|
end
|
@@ -30,7 +30,7 @@ module Debugger
|
|
30
30
|
if arg.nil? or arg == ''
|
31
31
|
if default.nil?
|
32
32
|
if print_error
|
33
|
-
print "
|
33
|
+
print Debugger.printer.print("parse.errors.onoff.syntax", arg: "nothing")
|
34
34
|
raise RuntimeError
|
35
35
|
end
|
36
36
|
return default
|
@@ -43,7 +43,7 @@ module Debugger
|
|
43
43
|
return false
|
44
44
|
else
|
45
45
|
if print_error
|
46
|
-
print "
|
46
|
+
print Debugger.printer.print("parse.errors.onoff.syntax", arg: arg)
|
47
47
|
raise RuntimeError
|
48
48
|
end
|
49
49
|
end
|
data/lib/ruby-debug/interface.rb
CHANGED
@@ -28,6 +28,18 @@ module Debugger
|
|
28
28
|
print afmt(msg)
|
29
29
|
end
|
30
30
|
|
31
|
+
def print_debug(msg)
|
32
|
+
print(msg)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def escape_input(args)
|
38
|
+
new_args = args.dup
|
39
|
+
new_args.first.gsub!("%", "%%") if args.first.is_a?(String)
|
40
|
+
new_args
|
41
|
+
end
|
42
|
+
|
31
43
|
end
|
32
44
|
|
33
45
|
class LocalInterface < Interface # :nodoc:
|
@@ -67,7 +79,7 @@ module Debugger
|
|
67
79
|
end
|
68
80
|
|
69
81
|
def print(*args)
|
70
|
-
STDOUT.printf(*args)
|
82
|
+
STDOUT.printf(*escape_input(args))
|
71
83
|
end
|
72
84
|
|
73
85
|
def close
|
@@ -169,7 +181,7 @@ module Debugger
|
|
169
181
|
end
|
170
182
|
|
171
183
|
def print(*args)
|
172
|
-
@socket.printf(*args)
|
184
|
+
@socket.printf(*escape_input(args))
|
173
185
|
end
|
174
186
|
|
175
187
|
private
|
@@ -222,7 +234,7 @@ module Debugger
|
|
222
234
|
end
|
223
235
|
|
224
236
|
def print(*args)
|
225
|
-
@out.printf(*args)
|
237
|
+
@out.printf(*escape_input(args))
|
226
238
|
end
|
227
239
|
|
228
240
|
def close
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
module Printers
|
3
|
+
class Base
|
4
|
+
class MissedPath < StandardError; end
|
5
|
+
class MissedArgument < StandardError; end
|
6
|
+
|
7
|
+
SEPARATOR = "."
|
8
|
+
|
9
|
+
def type
|
10
|
+
self.class.name.split("::").last.downcase
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def locate(path)
|
16
|
+
result = nil
|
17
|
+
contents.each do |_, contents|
|
18
|
+
result = parts(path).inject(contents) do |r, part|
|
19
|
+
r && r.has_key?(part) ? r[part] : nil
|
20
|
+
end
|
21
|
+
break if result
|
22
|
+
end
|
23
|
+
raise MissedPath, "Can't find part path '#{path}'" unless result
|
24
|
+
result
|
25
|
+
end
|
26
|
+
|
27
|
+
def translate(string, args = {})
|
28
|
+
string.gsub(/\|\w+$/, '').gsub(/{([^}]*)}/) do
|
29
|
+
key = $1.to_s.to_sym
|
30
|
+
raise MissedArgument, "Missed argument #{$1} for '#{string}'" unless args.has_key?(key)
|
31
|
+
args[key]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def parts(path)
|
36
|
+
path.split(SEPARATOR)
|
37
|
+
end
|
38
|
+
|
39
|
+
def contents
|
40
|
+
@contents ||= contents_files.inject({}) do |hash, filename|
|
41
|
+
hash[filename] = YAML.load_file(filename) || {}
|
42
|
+
hash
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def array_of_args(collection, &block)
|
47
|
+
collection.each.with_index.inject([]) do |array, (item, index)|
|
48
|
+
args = block.call(item, index)
|
49
|
+
array << args if args
|
50
|
+
array
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def contents_files
|
55
|
+
[File.expand_path(File.join("..", "texts", "base.yml"), __FILE__)]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
module Printers
|
3
|
+
class Plain < Base
|
4
|
+
include Columnize
|
5
|
+
|
6
|
+
def print(path, args = {})
|
7
|
+
message = translate(locate(path), args)
|
8
|
+
message << " (y/n) " if parts(path).include?("confirmations")
|
9
|
+
message << "\n"
|
10
|
+
end
|
11
|
+
|
12
|
+
def print_collection(path, collection, &block)
|
13
|
+
modifier = get_modifier(path)
|
14
|
+
lines = array_of_args(collection, &block).map { |args| print(path, args) }
|
15
|
+
if modifier == 'c'
|
16
|
+
columnize(lines.map { |l| l.gsub(/\n$/, '') }, Debugger.settings[:width])
|
17
|
+
else
|
18
|
+
lines.join("")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def print_variables(variables, _kind)
|
23
|
+
print_collection("variable.variable", variables) do |(key, value), _|
|
24
|
+
{key: key, value: value.nil? ? "nil" : value.to_s}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def get_modifier(path)
|
31
|
+
modifier_regexp = /\|(\w+)$/
|
32
|
+
modifier_match = locate(path).match(modifier_regexp)
|
33
|
+
modifier_match && modifier_match[1]
|
34
|
+
end
|
35
|
+
|
36
|
+
def contents_files
|
37
|
+
[File.expand_path(File.join("..", "texts", "plain.yml"), __FILE__)] + super
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
base:
|
2
|
+
errors:
|
3
|
+
no_suspended_thread: "There is no thread suspended at the time and therefore no context to execute '{input}'"
|
4
|
+
command_unavailable: "Command is unavailable"
|
5
|
+
unknown_command: "Unknown command: {input}"
|
6
|
+
|
7
|
+
breakpoints:
|
8
|
+
errors:
|
9
|
+
if: "Expecting 'if' in breakpoint condition; got: {expr}"
|
10
|
+
location: "Invalid breakpoint location: {expr}"
|
11
|
+
state: "We are not in a state that has an associated file"
|
12
|
+
class: "Unknown class {file}"
|
13
|
+
far_line: "There are only {lines} lines in file '{file}'"
|
14
|
+
source: "No source file named {file}"
|
15
|
+
state_add: "We are not in a state we can add breakpoints"
|
16
|
+
state_delete: "We are not in a state we can delete breakpoints"
|
17
|
+
expression: "Expression '{expr}' syntactically incorrect; breakpoint disabled"
|
18
|
+
no_breakpoint: "No breakpoint number {id}"
|
19
|
+
confirmations:
|
20
|
+
set_breakpoint: "Set breakpoint anyway?"
|
21
|
+
delete_all: "Delete all breakpoints?"
|
22
|
+
|
23
|
+
condition:
|
24
|
+
errors:
|
25
|
+
syntax: "'condition' must be followed a breakpoint number and expression"
|
26
|
+
no_breakpoints: "No breakpoints have been set"
|
27
|
+
|
28
|
+
continue:
|
29
|
+
errors:
|
30
|
+
unstopped_line: "Line {line} is not a stopping point in file '{file}'"
|
31
|
+
|
32
|
+
display:
|
33
|
+
confirmations:
|
34
|
+
clear_all: "Clear all expressions?"
|
35
|
+
errors:
|
36
|
+
undefined: "Display expression {expr} is not defined"
|
37
|
+
|
38
|
+
edit:
|
39
|
+
errors:
|
40
|
+
state: "We are not in a state that has an associated file"
|
41
|
+
file_line: "Invalid file/line number specification: {file_line}"
|
42
|
+
not_readable: "File '{file}' is not readable"
|
43
|
+
|
44
|
+
frame:
|
45
|
+
errors:
|
46
|
+
too_low: "Adjusting would put us beyond the oldest (initial) frame"
|
47
|
+
too_high: "Adjusting would put us beyond the newest (innermost) frame"
|
48
|
+
|
49
|
+
jump:
|
50
|
+
errors:
|
51
|
+
no_line_number: "'jump' must be followed by a line number"
|
52
|
+
bad_line_number: "Bad line number: {line}"
|
53
|
+
not_possible: "Not possible to jump from here"
|
54
|
+
no_frame: "Couldn't find debugged frame"
|
55
|
+
no_active_code: "Couldn't find active code at {file}:{line}"
|
56
|
+
|
57
|
+
quit:
|
58
|
+
confirmations:
|
59
|
+
really: "Really quit?"
|
60
|
+
|
61
|
+
reload:
|
62
|
+
messages:
|
63
|
+
done: "Source code is reloaded. Automatic reloading is {source_reloading}"
|
64
|
+
|
65
|
+
restart:
|
66
|
+
errors:
|
67
|
+
undefined: "Don't know name of debugged program"
|
68
|
+
not_exist: "Ruby program {prog} doesn't exist"
|
69
|
+
no_args: "Arguments have not been set. Use 'set args' to set them"
|
70
|
+
not_available: "Restart command is not available at this time"
|
71
|
+
debug:
|
72
|
+
outset: "Debugger was not called from the outset..."
|
73
|
+
change_initial_dir: "Failed to change initial directory {dir}"
|
74
|
+
not_executable: "Ruby program {prog} doesn't seem to be executable...\nWe'll add a call to Ruby"
|
75
|
+
|
76
|
+
save:
|
77
|
+
messages:
|
78
|
+
done: "Saved to '{path}'"
|
79
|
+
|
80
|
+
set:
|
81
|
+
errors:
|
82
|
+
invalid_call_style: "Invalid call style {style}. Should be one of: 'short' or 'last'"
|
83
|
+
wrong_history_arg: "Invalid history parameter {arg}. Should be 'filename', 'save' or 'size'"
|
84
|
+
wrong_history_args_number: "Need two parameters for 'set history'; got {size}"
|
85
|
+
unknown_setting: "Unknown setting {setting}"
|
86
|
+
unknown_subcommand: "Unknown set command {subcmd}"
|
87
|
+
|
88
|
+
show:
|
89
|
+
messages:
|
90
|
+
annotation: "Annotation level is {level}"
|
91
|
+
args: "Argument list to give program being debugged when it is started is '{args}'"
|
92
|
+
general: "{setting} is {status}"
|
93
|
+
call_style: "Frame call-display style is {style}"
|
94
|
+
debuggertesting: "Currently testing the debugger is {status}"
|
95
|
+
fullpath: "Displaying frame's full file names is {status}"
|
96
|
+
history:
|
97
|
+
filename: "{prefix}The filename in which to record the command history is '{filename}'"
|
98
|
+
save: "{prefix}Saving of history save is {status}"
|
99
|
+
size: "{prefix}Debugger history size is {size}"
|
100
|
+
tracing_plus:
|
101
|
+
'on': "line tracing style is different consecutive lines"
|
102
|
+
'off': "line tracing style is every line"
|
103
|
+
listsize: "Number of source lines to list by default is {size}"
|
104
|
+
port: "server port is {port}"
|
105
|
+
version: "ruby-debug {version}"
|
106
|
+
errors:
|
107
|
+
no_readline: "No readline support"
|
108
|
+
unknown_subcommand: "Unknown show subcommand {name}"
|
109
|
+
unknown: "Unknown show command {name}"
|
110
|
+
|
111
|
+
skip:
|
112
|
+
messages:
|
113
|
+
ok: "ok"
|
114
|
+
|
115
|
+
source:
|
116
|
+
errors:
|
117
|
+
not_found: "Command file '{file}' is not found"
|
118
|
+
|
119
|
+
thread:
|
120
|
+
errors:
|
121
|
+
no_number: "'{subcmd}' needs a thread number"
|
122
|
+
no_thread: "No such thread"
|
123
|
+
current_thread: "It's the current thread"
|
124
|
+
wrong_action: "Can't {subcmd} to the debugger thread {arg}"
|
125
|
+
already_running: "Already running"
|
126
|
+
debug_trace: "DebuggerThread are not supposed to be traced ({thread})"
|
127
|
+
|
128
|
+
toggle:
|
129
|
+
errors:
|
130
|
+
no_breakpoints: "No breakpoints have been set"
|
131
|
+
no_display: "No display expressions have been set"
|
132
|
+
syntax: "'{toggle}' must be followed 'display', 'breakpoints' or breakpoint numbers"
|
133
|
+
expression: "Expression '{expr}' syntactically incorrect; breakpoint remains disabled"
|
134
|
+
|
135
|
+
parse:
|
136
|
+
errors:
|
137
|
+
int:
|
138
|
+
too_low: "{cmd} argument '{str}' needs to at least {min}"
|
139
|
+
too_high: "{cmd} argument '{str}' needs to at most {max}"
|
140
|
+
not_number: "{cmd} argument '{str}' needs to be a number"
|
141
|
+
onoff:
|
142
|
+
syntax: "Expecting 'on', 1, 'off', or 0. Got {arg}"
|
143
|
+
|
144
|
+
variable:
|
145
|
+
errors:
|
146
|
+
not_class_module: "Should be Class/Module: {object}"
|