debug 1.2.4 → 1.3.0
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.
- checksums.yaml +4 -4
- data/README.md +116 -5
- data/ext/debug/debug.c +2 -1
- data/ext/debug/extconf.rb +2 -0
- data/lib/debug/client.rb +41 -17
- data/lib/debug/config.rb +30 -10
- data/lib/debug/console.rb +92 -25
- data/lib/debug/local.rb +4 -1
- data/lib/debug/prelude.rb +49 -0
- data/lib/debug/server.rb +161 -17
- data/lib/debug/server_cdp.rb +412 -0
- data/lib/debug/server_dap.rb +53 -23
- data/lib/debug/session.rb +397 -120
- data/lib/debug/thread_client.rb +4 -2
- data/lib/debug/version.rb +1 -1
- data/misc/README.md.erb +95 -1
- metadata +4 -2
data/lib/debug/server_dap.rb
CHANGED
@@ -6,11 +6,17 @@ module DEBUGGER__
|
|
6
6
|
module UI_DAP
|
7
7
|
SHOW_PROTOCOL = ENV['RUBY_DEBUG_DAP_SHOW_PROTOCOL'] == '1'
|
8
8
|
|
9
|
+
def show_protocol dir, msg
|
10
|
+
if SHOW_PROTOCOL
|
11
|
+
$stderr.puts "\##{Process.pid}:[#{dir}] #{msg}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
9
15
|
def dap_setup bytes
|
10
16
|
CONFIG.set_config no_color: true
|
11
17
|
@seq = 0
|
12
18
|
|
13
|
-
|
19
|
+
show_protocol :>, bytes
|
14
20
|
req = JSON.load(bytes)
|
15
21
|
|
16
22
|
# capability
|
@@ -80,10 +86,8 @@ module DEBUGGER__
|
|
80
86
|
def send **kw
|
81
87
|
kw[:seq] = @seq += 1
|
82
88
|
str = JSON.dump(kw)
|
83
|
-
|
84
|
-
|
85
|
-
@sock.print header = "Content-Length: #{str.size}\r\n\r\n"
|
86
|
-
@sock.write str
|
89
|
+
show_protocol '<', str
|
90
|
+
@sock.write "Content-Length: #{str.size}\r\n\r\n#{str}"
|
87
91
|
end
|
88
92
|
|
89
93
|
def send_response req, success: true, **kw
|
@@ -111,19 +115,32 @@ module DEBUGGER__
|
|
111
115
|
end
|
112
116
|
end
|
113
117
|
|
118
|
+
class RetryBecauseCantRead < Exception
|
119
|
+
end
|
120
|
+
|
114
121
|
def recv_request
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
122
|
+
begin
|
123
|
+
r = IO.select([@sock])
|
124
|
+
|
125
|
+
@session.process_group.sync do
|
126
|
+
raise RetryBecauseCantRead unless IO.select([@sock], nil, nil, 0)
|
127
|
+
|
128
|
+
case header = @sock.gets
|
129
|
+
when /Content-Length: (\d+)/
|
130
|
+
b = @sock.read(2)
|
131
|
+
raise b.inspect unless b == "\r\n"
|
132
|
+
|
133
|
+
l = @sock.read(s = $1.to_i)
|
134
|
+
show_protocol :>, l
|
135
|
+
JSON.load(l)
|
136
|
+
when nil
|
137
|
+
nil
|
138
|
+
else
|
139
|
+
raise "unrecognized line: #{l} (#{l.size} bytes)"
|
140
|
+
end
|
141
|
+
end
|
142
|
+
rescue RetryBecauseCantRead
|
143
|
+
retry
|
127
144
|
end
|
128
145
|
end
|
129
146
|
|
@@ -137,6 +154,11 @@ module DEBUGGER__
|
|
137
154
|
## boot/configuration
|
138
155
|
when 'launch'
|
139
156
|
send_response req
|
157
|
+
@is_attach = false
|
158
|
+
when 'attach'
|
159
|
+
send_response req
|
160
|
+
Process.kill(:SIGURG, Process.pid)
|
161
|
+
@is_attach = true
|
140
162
|
when 'setBreakpoints'
|
141
163
|
path = args.dig('source', 'path')
|
142
164
|
bp_args = args['breakpoints']
|
@@ -179,13 +201,21 @@ module DEBUGGER__
|
|
179
201
|
send_response req, breakpoints: filters
|
180
202
|
when 'configurationDone'
|
181
203
|
send_response req
|
182
|
-
@
|
183
|
-
|
184
|
-
|
185
|
-
|
204
|
+
if defined?(@is_attach) && @is_attach
|
205
|
+
@q_msg << 'p'
|
206
|
+
send_event 'stopped', reason: 'pause',
|
207
|
+
threadId: 1,
|
208
|
+
allThreadsStopped: true
|
209
|
+
else
|
210
|
+
@q_msg << 'continue'
|
211
|
+
end
|
186
212
|
when 'disconnect'
|
213
|
+
if args.fetch("terminateDebuggee", false)
|
214
|
+
@q_msg << 'kill!'
|
215
|
+
else
|
216
|
+
@q_msg << 'continue'
|
217
|
+
end
|
187
218
|
send_response req
|
188
|
-
@q_msg << 'continue'
|
189
219
|
|
190
220
|
## control
|
191
221
|
when 'continue'
|
@@ -297,7 +327,7 @@ module DEBUGGER__
|
|
297
327
|
return :retry
|
298
328
|
end
|
299
329
|
|
300
|
-
def
|
330
|
+
def process_protocol_request req
|
301
331
|
case req['command']
|
302
332
|
when 'stepBack'
|
303
333
|
if @tc.recorder&.can_step_back?
|