20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/ruby-debug/commands/breakpoints.rb', line 20
def execute
if @match[1]
line, _, _, expr = @match.captures
else
_, file, line, expr = @match.captures
end
if expr
if expr !~ /^\s*if\s+(.+)/
if file or line
errmsg pr("errors.if", expr: expr)
else
errmsg pr("errors.location", expr: expr)
end
return
else
expr = $1
end
end
brkpt_filename = nil
if file.nil?
unless @state.context
errmsg pr("errors.state_add")
return
end
brkpt_filename = @state.file
file = File.basename(@state.file)
if line.nil?
line = @state.line.to_s
end
elsif line !~ /^\d+$/
klass = debug_silent_eval(file)
if klass && klass.kind_of?(Module)
class_name = klass.name if klass
else
errmsg pr("errors.class", file: file)
throw :debug_error
end
else
file = File.expand_path(file) if file.index(File::SEPARATOR) || \
File::ALT_SEPARATOR && file.index(File::ALT_SEPARATOR)
brkpt_filename = file
end
if line =~ /^\d+$/
line = line.to_i
if LineCache.cache(brkpt_filename, Command.settings[:reload_source_on_change])
last_line = LineCache.size(brkpt_filename)
if line > last_line
errmsg pr("errors.far_line", lines: last_line, file: file)
return
end
else
errmsg pr("errors.source", file: file)
return unless confirm(pr("confirmations.set_breakpoint"))
end
if file.nil? && !@state.context
errmsg pr("errors.state")
return
end
b = Debugger.add_breakpoint brkpt_filename, line, expr
print pr("set_breakpoint_to_line", id: b.id, file: brkpt_filename, line: line)
unless syntax_valid?(expr)
errmsg pr("errors.expression", expr: expr)
b.enabled = false
end
else
method = line.intern.id2name
b = Debugger.add_breakpoint class_name, method, expr
print pr("set_breakpoint_to_method", id: b.id, class: class_name, method: method)
end
end
|