rbx-trepanning 0.0.1-universal-rubinius
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/ChangeLog +376 -0
- data/LICENSE +25 -0
- data/NEWS +2 -0
- data/README.textile +28 -0
- data/Rakefile +165 -0
- data/THANKS +14 -0
- data/app/breakpoint.rb +218 -0
- data/app/breakpoint.rbc +3564 -0
- data/app/brkptmgr.rb +138 -0
- data/app/brkptmgr.rbc +2827 -0
- data/app/default.rb +61 -0
- data/app/default.rbc +1011 -0
- data/app/display.rb +35 -0
- data/app/display.rbc +968 -0
- data/app/frame.rb +98 -0
- data/app/frame.rbc +1808 -0
- data/app/irb.rb +112 -0
- data/app/irb.rbc +2111 -0
- data/app/iseq.rb +95 -0
- data/app/iseq.rbc +1801 -0
- data/app/method.rb +173 -0
- data/app/method.rbc +2492 -0
- data/app/mock.rb +13 -0
- data/app/mock.rbc +398 -0
- data/app/options.rb +123 -0
- data/app/options.rbc +2183 -0
- data/app/run.rb +86 -0
- data/app/run.rbc +1244 -0
- data/app/util.rb +49 -0
- data/app/util.rbc +1144 -0
- data/app/validate.rb +30 -0
- data/app/validate.rbc +676 -0
- data/bin/trepan.compiled.rbc +1043 -0
- data/bin/trepanx +63 -0
- data/bin/trepanx.compiled.rbc +985 -0
- data/interface/base_intf.rb +95 -0
- data/interface/base_intf.rbc +1742 -0
- data/interface/script.rb +104 -0
- data/interface/script.rbc +1642 -0
- data/interface/user.rb +91 -0
- data/interface/user.rbc +1418 -0
- data/io/base_io.rb +94 -0
- data/io/base_io.rbc +1404 -0
- data/io/input.rb +112 -0
- data/io/input.rbc +1979 -0
- data/io/null_output.rb +42 -0
- data/io/null_output.rbc +730 -0
- data/io/string_array.rb +156 -0
- data/io/string_array.rbc +2466 -0
- data/lib/trepanning.rb +398 -0
- data/lib/trepanning.rbc +6661 -0
- data/processor/breakpoint.rb +161 -0
- data/processor/command/alias.rb +55 -0
- data/processor/command/backtrace.rb +46 -0
- data/processor/command/base/cmd.rb +124 -0
- data/processor/command/base/subcmd.rb +213 -0
- data/processor/command/base/submgr.rb +179 -0
- data/processor/command/base/subsubcmd.rb +103 -0
- data/processor/command/base/subsubmgr.rb +184 -0
- data/processor/command/break.rb +100 -0
- data/processor/command/continue.rb +82 -0
- data/processor/command/delete.rb +30 -0
- data/processor/command/directory.rb +43 -0
- data/processor/command/disassemble.rb +103 -0
- data/processor/command/down.rb +54 -0
- data/processor/command/eval.rb +31 -0
- data/processor/command/exit.rb +58 -0
- data/processor/command/finish.rb +78 -0
- data/processor/command/frame.rb +89 -0
- data/processor/command/help.rb +146 -0
- data/processor/command/info.rb +28 -0
- data/processor/command/info_subcmd/breakpoints.rb +75 -0
- data/processor/command/info_subcmd/file.rb +153 -0
- data/processor/command/info_subcmd/method.rb +71 -0
- data/processor/command/info_subcmd/program.rb +59 -0
- data/processor/command/info_subcmd/variables.rb +40 -0
- data/processor/command/irb.rb +96 -0
- data/processor/command/kill.rb +70 -0
- data/processor/command/list.rb +296 -0
- data/processor/command/next.rb +66 -0
- data/processor/command/nexti.rb +59 -0
- data/processor/command/pr.rb +38 -0
- data/processor/command/ps.rb +40 -0
- data/processor/command/restart.rb +60 -0
- data/processor/command/set.rb +47 -0
- data/processor/command/set_subcmd/auto.rb +28 -0
- data/processor/command/set_subcmd/auto_subcmd/dis.rb +33 -0
- data/processor/command/set_subcmd/auto_subcmd/eval.rb +54 -0
- data/processor/command/set_subcmd/auto_subcmd/irb.rb +34 -0
- data/processor/command/set_subcmd/auto_subcmd/list.rb +34 -0
- data/processor/command/set_subcmd/basename.rb +26 -0
- data/processor/command/set_subcmd/debug.rb +27 -0
- data/processor/command/set_subcmd/debug_subcmd/dbgr.rb +36 -0
- data/processor/command/set_subcmd/debug_subcmd/skip.rb +23 -0
- data/processor/command/set_subcmd/debug_subcmd/step.rb +23 -0
- data/processor/command/set_subcmd/different.rb +60 -0
- data/processor/command/set_subcmd/hidelevel.rb +63 -0
- data/processor/command/set_subcmd/kernelstep.rb +61 -0
- data/processor/command/set_subcmd/max.rb +29 -0
- data/processor/command/set_subcmd/max_subcmd/list.rb +49 -0
- data/processor/command/set_subcmd/max_subcmd/stack.rb +50 -0
- data/processor/command/set_subcmd/max_subcmd/string.rb +54 -0
- data/processor/command/set_subcmd/max_subcmd/width.rb +49 -0
- data/processor/command/set_subcmd/substitute.rb +25 -0
- data/processor/command/set_subcmd/substitute_subcmd/path.rb +56 -0
- data/processor/command/set_subcmd/trace.rb +37 -0
- data/processor/command/set_subcmd/trace_subcmd/print.rb +57 -0
- data/processor/command/show.rb +27 -0
- data/processor/command/show_subcmd/alias.rb +43 -0
- data/processor/command/show_subcmd/args.rb +26 -0
- data/processor/command/show_subcmd/auto.rb +28 -0
- data/processor/command/show_subcmd/auto_subcmd/dis.rb +37 -0
- data/processor/command/show_subcmd/auto_subcmd/eval.rb +28 -0
- data/processor/command/show_subcmd/auto_subcmd/irb.rb +23 -0
- data/processor/command/show_subcmd/auto_subcmd/list.rb +22 -0
- data/processor/command/show_subcmd/basename.rb +22 -0
- data/processor/command/show_subcmd/debug.rb +27 -0
- data/processor/command/show_subcmd/debug_subcmd/dbgr.rb +21 -0
- data/processor/command/show_subcmd/debug_subcmd/skip.rb +22 -0
- data/processor/command/show_subcmd/debug_subcmd/step.rb +22 -0
- data/processor/command/show_subcmd/different.rb +27 -0
- data/processor/command/show_subcmd/hidelevel.rb +42 -0
- data/processor/command/show_subcmd/kernelstep.rb +37 -0
- data/processor/command/show_subcmd/max.rb +30 -0
- data/processor/command/show_subcmd/max_subcmd/list.rb +38 -0
- data/processor/command/show_subcmd/max_subcmd/stack.rb +36 -0
- data/processor/command/show_subcmd/max_subcmd/string.rb +42 -0
- data/processor/command/show_subcmd/max_subcmd/width.rb +37 -0
- data/processor/command/show_subcmd/trace.rb +29 -0
- data/processor/command/show_subcmd/trace_subcmd/print.rb +38 -0
- data/processor/command/source.rb +83 -0
- data/processor/command/step.rb +41 -0
- data/processor/command/tbreak.rb +19 -0
- data/processor/command/unalias.rb +44 -0
- data/processor/command/up.rb +87 -0
- data/processor/default.rb +56 -0
- data/processor/disassemble.rb +32 -0
- data/processor/eval.rb +96 -0
- data/processor/frame.rb +211 -0
- data/processor/help.rb +72 -0
- data/processor/hook.rb +133 -0
- data/processor/load_cmds.rb +101 -0
- data/processor/location.rb +128 -0
- data/processor/main.rb +394 -0
- data/processor/mock.rb +137 -0
- data/processor/msg.rb +28 -0
- data/processor/running.rb +230 -0
- data/processor/stepping.rb +115 -0
- data/processor/subcmd.rb +160 -0
- data/processor/validate.rb +355 -0
- data/test/data/enable.right +36 -0
- data/test/data/fname-with-blank.cmd +6 -0
- data/test/data/fname-with-blank.right +1 -0
- data/test/data/quit-Xdebug.right +3 -0
- data/test/data/quit.cmd +5 -0
- data/test/data/quit.right +0 -0
- data/test/example/fname with blank.rb +1 -0
- data/test/example/gcd-xx.rb +18 -0
- data/test/example/gcd.rb +19 -0
- data/test/example/gcd1.rb +24 -0
- data/test/example/null.rb +1 -0
- data/test/example/thread1.rb +3 -0
- data/test/functional/fn_helper.rb +112 -0
- data/test/functional/test-break-name.rb +52 -0
- data/test/functional/test-break.rb +51 -0
- data/test/functional/test-finish.rb +70 -0
- data/test/functional/test-fn_helper.rb +43 -0
- data/test/functional/test-list.rb +55 -0
- data/test/functional/test-next-bug.rb +49 -0
- data/test/functional/test-next.rb +101 -0
- data/test/functional/test-step.rb +272 -0
- data/test/functional/test-step2.rb +35 -0
- data/test/functional/test-tbreak.rb +41 -0
- data/test/integration/file-diff.rb +89 -0
- data/test/integration/helper.rb +78 -0
- data/test/integration/test-fname-with-blank.rb +12 -0
- data/test/integration/test-quit.rb +25 -0
- data/test/unit/cmd-helper.rb +46 -0
- data/test/unit/test-app-brkpt.rb +30 -0
- data/test/unit/test-app-brkptmgr.rb +51 -0
- data/test/unit/test-app-iseq.rb +49 -0
- data/test/unit/test-app-method.rb +54 -0
- data/test/unit/test-app-options.rb +61 -0
- data/test/unit/test-app-run.rb +16 -0
- data/test/unit/test-app-util.rb +28 -0
- data/test/unit/test-app-validate.rb +18 -0
- data/test/unit/test-base-subcmd.rb +61 -0
- data/test/unit/test-bin-trepanx.rb +48 -0
- data/test/unit/test-cmd-alias.rb +49 -0
- data/test/unit/test-cmd-break.rb +23 -0
- data/test/unit/test-cmd-exit.rb +27 -0
- data/test/unit/test-cmd-help.rb +101 -0
- data/test/unit/test-cmd-kill.rb +48 -0
- data/test/unit/test-intf-user.rb +46 -0
- data/test/unit/test-io-input.rb +27 -0
- data/test/unit/test-proc-eval.rb +37 -0
- data/test/unit/test-proc-frame.rb +79 -0
- data/test/unit/test-proc-help.rb +16 -0
- data/test/unit/test-proc-hook.rb +30 -0
- data/test/unit/test-proc-load_cmds.rb +41 -0
- data/test/unit/test-proc-location.rb +48 -0
- data/test/unit/test-proc-main.rb +96 -0
- data/test/unit/test-proc-validate.rb +91 -0
- data/test/unit/test-subcmd-help.rb +51 -0
- metadata +337 -0
data/app/breakpoint.rb
ADDED
@@ -0,0 +1,218 @@
|
|
1
|
+
module Trepanning
|
2
|
+
class Breakpoint
|
3
|
+
|
4
|
+
attr_accessor :condition # If non-nil, this is a String to be eval'd
|
5
|
+
# which must be true to enter the debugger
|
6
|
+
attr_reader :event # Symbol. Optional type of event associated with
|
7
|
+
# breakpoint.
|
8
|
+
attr_accessor :hits # Fixnum. The number of timea a breakpoint
|
9
|
+
# has been hit (with a true condition). Do
|
10
|
+
# we want to (also) record hits independent
|
11
|
+
# of the condition?
|
12
|
+
attr_reader :id # Fixnum. Name of breakpoint
|
13
|
+
|
14
|
+
@@next_id = 1
|
15
|
+
|
16
|
+
BRKPT_DEFAULT_SETTINGS = {
|
17
|
+
:condition => 'true',
|
18
|
+
:enabled => 'true',
|
19
|
+
:temp => false,
|
20
|
+
:event => :Unknown,
|
21
|
+
} unless defined?(BRKPT_DEFAULT_SETTINGS)
|
22
|
+
|
23
|
+
def self.for_ip(exec, ip, opts={})
|
24
|
+
name = opts[:name] || :anon
|
25
|
+
line = exec.line_from_ip(ip)
|
26
|
+
|
27
|
+
Breakpoint.new(name, exec, ip, line, nil, opts)
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(name, method, ip, line, id=nil, opts = {})
|
31
|
+
@descriptor = name
|
32
|
+
@id = id
|
33
|
+
@method = method
|
34
|
+
@ip = ip
|
35
|
+
@line = line
|
36
|
+
|
37
|
+
# If not nil, is a Rubinius::VariableScope. This is what we
|
38
|
+
# check to have call-frame-specific breakpoints.
|
39
|
+
@scope = nil
|
40
|
+
|
41
|
+
@related_bp = []
|
42
|
+
|
43
|
+
opts = BRKPT_DEFAULT_SETTINGS.merge(opts)
|
44
|
+
opts.keys.each do |key|
|
45
|
+
self.instance_variable_set('@'+key.to_s, opts[key])
|
46
|
+
end
|
47
|
+
|
48
|
+
@hits = 0
|
49
|
+
# unless @id
|
50
|
+
# @id = @@next_id
|
51
|
+
# @@next_id += 1
|
52
|
+
# end
|
53
|
+
|
54
|
+
@set = false
|
55
|
+
end
|
56
|
+
|
57
|
+
attr_reader :method, :ip, :line, :descriptor
|
58
|
+
attr_accessor :related_bp
|
59
|
+
|
60
|
+
def scoped!(scope, temp = true)
|
61
|
+
@temp = temp
|
62
|
+
@scope = scope
|
63
|
+
end
|
64
|
+
|
65
|
+
def set_temp!
|
66
|
+
@temp = true
|
67
|
+
end
|
68
|
+
|
69
|
+
def scoped?
|
70
|
+
!!@scope
|
71
|
+
end
|
72
|
+
|
73
|
+
def related_with(bp)
|
74
|
+
@related_bp += [bp] + bp.related_bp
|
75
|
+
@related_bp.uniq!
|
76
|
+
# List of related breakpoints should be shared.
|
77
|
+
bp.related_bp = @related_bp
|
78
|
+
end
|
79
|
+
|
80
|
+
def activate
|
81
|
+
@set = true
|
82
|
+
@method.set_breakpoint @ip, self
|
83
|
+
end
|
84
|
+
|
85
|
+
# Return true if the breakpoint is relevant. That is, the
|
86
|
+
# breakpoint is either not a scoped or it is scoped and test_scope
|
87
|
+
# matches the desired scope. We also remove the breakpoint and any
|
88
|
+
# related breakpoints if it was hit and temporary.
|
89
|
+
def hit!(test_scope)
|
90
|
+
return true unless @temp
|
91
|
+
return false if @scope && test_scope != @scope
|
92
|
+
|
93
|
+
@related_bp.each { |bp| bp.remove! }
|
94
|
+
remove!
|
95
|
+
return true
|
96
|
+
end
|
97
|
+
|
98
|
+
# def condition?(bind)
|
99
|
+
# if eval(@condition, bind)
|
100
|
+
# if @ignore > 0
|
101
|
+
# @ignore -= 1
|
102
|
+
# return false
|
103
|
+
# else
|
104
|
+
# @hits += 1
|
105
|
+
# return true
|
106
|
+
# end
|
107
|
+
# else
|
108
|
+
# return false
|
109
|
+
# end
|
110
|
+
# end
|
111
|
+
|
112
|
+
def delete!
|
113
|
+
remove!
|
114
|
+
end
|
115
|
+
|
116
|
+
def describe
|
117
|
+
"#{descriptor} - #{location}"
|
118
|
+
end
|
119
|
+
|
120
|
+
def disable
|
121
|
+
@enabled = false
|
122
|
+
end
|
123
|
+
|
124
|
+
def enabled
|
125
|
+
@enabled = true
|
126
|
+
end
|
127
|
+
|
128
|
+
def enabled=(bool)
|
129
|
+
@enabled = bool
|
130
|
+
end
|
131
|
+
|
132
|
+
def enabled?
|
133
|
+
@enabled
|
134
|
+
end
|
135
|
+
|
136
|
+
# Return a one-character "icon" giving the state of the breakpoint
|
137
|
+
# 't': temporary breakpoint
|
138
|
+
# 'B': enabled breakpoint
|
139
|
+
# 'b': disabled breakpoint
|
140
|
+
def icon_char
|
141
|
+
temp? ? 't' : (enabled? ? 'B' : 'b')
|
142
|
+
end
|
143
|
+
|
144
|
+
def location
|
145
|
+
"#{@method.active_path}:#{@line} (@#{ip})"
|
146
|
+
end
|
147
|
+
|
148
|
+
def remove!
|
149
|
+
return unless @set
|
150
|
+
|
151
|
+
@set = false
|
152
|
+
@method.clear_breakpoint(@ip)
|
153
|
+
end
|
154
|
+
|
155
|
+
def temp?
|
156
|
+
@temp
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
class DeferredBreakpoint
|
162
|
+
def initialize(debugger, frame, klass, which, name, line=nil, list=nil)
|
163
|
+
@debugger = debugger
|
164
|
+
@frame = frame
|
165
|
+
@klass_name = klass
|
166
|
+
@which = which
|
167
|
+
@name = name
|
168
|
+
@line = line
|
169
|
+
@list = list
|
170
|
+
end
|
171
|
+
|
172
|
+
def descriptor
|
173
|
+
"#{@klass_name}#{@which}#{@name}"
|
174
|
+
end
|
175
|
+
|
176
|
+
def resolve!
|
177
|
+
begin
|
178
|
+
klass = @frame.run(@klass_name)
|
179
|
+
rescue NameError
|
180
|
+
return false
|
181
|
+
end
|
182
|
+
|
183
|
+
begin
|
184
|
+
if @which == "#"
|
185
|
+
meth = klass.instance_method(@name)
|
186
|
+
else
|
187
|
+
meth = klass.method(@name)
|
188
|
+
end
|
189
|
+
rescue NameError
|
190
|
+
return false
|
191
|
+
end
|
192
|
+
|
193
|
+
@debugger.processor.msg "Resolved breakpoint for #{@klass_name}#{@which}#{@name}"
|
194
|
+
|
195
|
+
@debugger.processor.set_breakpoint_method descriptor, meth, @line
|
196
|
+
|
197
|
+
return true
|
198
|
+
end
|
199
|
+
|
200
|
+
def describe
|
201
|
+
"#{descriptor} - unknown location (deferred)"
|
202
|
+
end
|
203
|
+
|
204
|
+
def delete!
|
205
|
+
if @list
|
206
|
+
@list.delete self
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
if __FILE__ == $0
|
213
|
+
method = Rubinius::CompiledMethod.of_sender
|
214
|
+
bp = Trepanning::Breakpoint.new '<start>', method, 1, 2, 0
|
215
|
+
%w(describe location icon_char hits temp? enabled? condition).each do |field|
|
216
|
+
puts "#{field}: #{bp.send(field.to_sym)}"
|
217
|
+
end
|
218
|
+
end
|