debug 1.3.0 → 1.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +9 -11
- data/README.md +4 -4
- data/ext/debug/debug.c +1 -1
- data/lib/debug/client.rb +1 -3
- data/lib/debug/color.rb +1 -1
- data/lib/debug/config.rb +36 -20
- data/lib/debug/local.rb +18 -0
- data/lib/debug/prelude.rb +1 -1
- data/lib/debug/server.rb +26 -7
- data/lib/debug/server_cdp.rb +22 -8
- data/lib/debug/server_dap.rb +28 -7
- data/lib/debug/session.rb +37 -18
- data/lib/debug/version.rb +1 -1
- data/misc/README.md.erb +4 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58d7a886dc29b717d9f31ca7859a40a881a251a4c5e64705ac38de1cb94c0f32
|
4
|
+
data.tar.gz: a58994d8d302dac0aedd63775b8d81769d326a6bb0746d9953182fa8b36894fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3988bc3fd10cab3592a9f6b3b816dd2f5cabf5e8e4bceaec646011a1663b037a7f9683008c77d1c91a0a8f984540c16ef5975fa14b93f84b6cca5915e98df440
|
7
|
+
data.tar.gz: 4283c41adf172ae2d1e51bb34adfb65ab2b521862bae6be7bd08ba485bea178e0e2ec511db7b9f0297e2aea4e4d2ac249887bb9271f51d71d6beb76a0aee63d0
|
data/CONTRIBUTING.md
CHANGED
@@ -206,17 +206,15 @@ end
|
|
206
206
|
#### gentest options
|
207
207
|
You can get more information about `gentest` here.
|
208
208
|
|
209
|
-
The default method name is `
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
$ bin/gentest target.rb -c StepTest -m test_step
|
219
|
-
```
|
209
|
+
The default method name is `test_#{some integer numbers}`, the class name is `FooTest`, and the file name will be `foo_test.rb`.
|
210
|
+
The following table shows examples of the gentest options.
|
211
|
+
|
212
|
+
| Command | Description | File | Class | Method |
|
213
|
+
| --- | --- | --- | --- | --- |
|
214
|
+
| `$ bin/gentest target.rb` | Run without any options | `foo_test.rb` | `FooTest` | `test_#{some integer numbers}` |
|
215
|
+
| `$ bin/gentest target.rb -c step` | Specify the class name | `step_test.rb` | `StepTest` | `test_#{some integer numbers}` |
|
216
|
+
| `$ bin/gentest target.rb -m test_step` | Specify the method name | `foo_test.rb` | `FooTest` | `test_step` |
|
217
|
+
| `$ bin/gentest target.rb -c step -m test_step` | Specify the class name and the method name | `step_test.rb` | `StepTest` | `test_step` |
|
220
218
|
|
221
219
|
## To Update README
|
222
220
|
|
data/README.md
CHANGED
@@ -11,7 +11,7 @@ New debug.rb has several advantages:
|
|
11
11
|
* [Remote debugging](#remote-debugging): Support remote debugging natively.
|
12
12
|
* UNIX domain socket
|
13
13
|
* TCP/IP
|
14
|
-
*
|
14
|
+
* Integration with rich debugger frontend
|
15
15
|
* VSCode/DAP ([VSCode rdbg Ruby Debugger - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=KoichiSasada.vscode-rdbg))
|
16
16
|
* Chrome DevTools
|
17
17
|
* Extensible: application can introduce debugging support with several ways:
|
@@ -340,7 +340,7 @@ $ RUBY_DEBUG_PORT=12345 ruby target.rb
|
|
340
340
|
|
341
341
|
### Integration with external debugger frontend
|
342
342
|
|
343
|
-
You can attach with external
|
343
|
+
You can attach with external debugger frontend with VSCode and Chrome.
|
344
344
|
|
345
345
|
```
|
346
346
|
$ rdbg --open=[frontend] target.rb
|
@@ -352,7 +352,7 @@ Also `open` command allows opening the debug port.
|
|
352
352
|
|
353
353
|
#### VSCode integration
|
354
354
|
|
355
|
-
If you don't run a debuggee Ruby process on VSCode, you can attach with VSCode later with the
|
355
|
+
If you don't run a debuggee Ruby process on VSCode, you can attach with VSCode later with the following steps.
|
356
356
|
|
357
357
|
`rdbg --open=vscode` opens the debug port and tries to invoke the VSCode (`code` command).
|
358
358
|
|
@@ -364,7 +364,7 @@ Launching: code /tmp/ruby-debug-vscode-20211014-27706-gd7e85/ /tmp/ruby-debug-vs
|
|
364
364
|
DEBUGGER: Connected.
|
365
365
|
```
|
366
366
|
|
367
|
-
And it
|
367
|
+
And it tries to invoke the new VSCode window and VSCode starts attaching to the debuggee Ruby program automatically.
|
368
368
|
|
369
369
|
You can also use `open vscode` command in REPL.
|
370
370
|
|
data/ext/debug/debug.c
CHANGED
@@ -64,7 +64,7 @@ di_body(const rb_debug_inspector_t *dc, void *ptr)
|
|
64
64
|
|
65
65
|
if (!NIL_P(iseq)) {
|
66
66
|
VALUE path = iseq_realpath(iseq);
|
67
|
-
if (!NIL_P(path) && str_start_with(path, skip_path_prefix)) continue;
|
67
|
+
if (!NIL_P(path) && !NIL_P(skip_path_prefix) && str_start_with(path, skip_path_prefix)) continue;
|
68
68
|
}
|
69
69
|
|
70
70
|
loc = RARRAY_AREF(locs, i);
|
data/lib/debug/client.rb
CHANGED
data/lib/debug/color.rb
CHANGED
data/lib/debug/config.rb
CHANGED
@@ -371,38 +371,54 @@ module DEBUGGER__
|
|
371
371
|
|
372
372
|
## Unix domain socket configuration
|
373
373
|
|
374
|
-
def self.
|
374
|
+
def self.check_dir_authority path
|
375
|
+
fs = File.stat(path)
|
376
|
+
|
377
|
+
unless (dir_uid = fs.uid) == (uid = Process.uid)
|
378
|
+
raise "#{path} uid is #{dir_uid}, but Process.uid is #{uid}"
|
379
|
+
end
|
380
|
+
unless (dir_mode = fs.mode) == 040700 # 4: dir, 7:rwx
|
381
|
+
raise "#{path}'s mode is #{dir_mode.to_s(8)} (should be 040700)"
|
382
|
+
end
|
383
|
+
|
384
|
+
path
|
385
|
+
end
|
386
|
+
|
387
|
+
def self.unix_domain_socket_tmpdir
|
375
388
|
require 'tmpdir'
|
376
389
|
|
377
|
-
|
378
|
-
when path = CONFIG[:sock_dir]
|
379
|
-
when path = ENV['XDG_RUNTIME_DIR']
|
380
|
-
when tmpdir = Dir.tmpdir
|
390
|
+
if tmpdir = Dir.tmpdir
|
381
391
|
path = File.join(tmpdir, "ruby-debug-sock-#{Process.uid}")
|
382
392
|
|
383
|
-
|
384
|
-
fs = File.stat(path)
|
385
|
-
unless (dir_uid = fs.uid) == (uid = Process.uid)
|
386
|
-
raise "#{path} uid is #{dir_uid}, but Process.uid is #{uid}"
|
387
|
-
end
|
388
|
-
unless (dir_mode = fs.mode) == 040700 # 4: dir, 7:rwx
|
389
|
-
raise "#{path}'s mode is #{dir_mode.to_s(8)} (should be 040700)"
|
390
|
-
end
|
391
|
-
else
|
393
|
+
unless File.exist?(path)
|
392
394
|
d = Dir.mktmpdir
|
393
395
|
File.rename(d, path)
|
394
396
|
end
|
395
|
-
|
397
|
+
|
398
|
+
check_dir_authority(path)
|
399
|
+
end
|
400
|
+
end
|
401
|
+
|
402
|
+
def self.unix_domain_socket_homedir
|
403
|
+
if home = ENV['HOME']
|
396
404
|
path = File.join(home, '.ruby-debug-sock')
|
397
405
|
|
398
|
-
|
399
|
-
when !File.exist?(path)
|
406
|
+
unless File.exist?(path)
|
400
407
|
Dir.mkdir(path, 0700)
|
401
|
-
when !File.directory?(path)
|
402
|
-
raise "#{path} is not a directory."
|
403
408
|
end
|
409
|
+
|
410
|
+
check_dir_authority(path)
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
414
|
+
def self.unix_domain_socket_dir
|
415
|
+
case
|
416
|
+
when path = CONFIG[:sock_dir]
|
417
|
+
when path = ENV['XDG_RUNTIME_DIR']
|
418
|
+
when path = unix_domain_socket_tmpdir
|
419
|
+
when path = unix_domain_socket_homedir
|
404
420
|
else
|
405
|
-
raise 'specify RUBY_DEBUG_SOCK_DIR environment variable
|
421
|
+
raise 'specify RUBY_DEBUG_SOCK_DIR environment variable.'
|
406
422
|
end
|
407
423
|
|
408
424
|
path
|
data/lib/debug/local.rb
CHANGED
@@ -86,6 +86,24 @@ module DEBUGGER__
|
|
86
86
|
trap(:INT, prev_handler)
|
87
87
|
end
|
88
88
|
end
|
89
|
+
|
90
|
+
def after_fork_parent
|
91
|
+
parent_pid = Process.pid
|
92
|
+
|
93
|
+
at_exit{
|
94
|
+
SESSION.intercept_trap_sigint_end
|
95
|
+
trap(:SIGINT, :IGNORE)
|
96
|
+
|
97
|
+
if Process.pid == parent_pid
|
98
|
+
# only check child process from its parent
|
99
|
+
begin
|
100
|
+
# wait for all child processes to keep terminal
|
101
|
+
loop{ Process.waitpid }
|
102
|
+
rescue Errno::ESRCH, Errno::ECHILD
|
103
|
+
end
|
104
|
+
end
|
105
|
+
}
|
106
|
+
end
|
89
107
|
end
|
90
108
|
end
|
91
109
|
|
data/lib/debug/prelude.rb
CHANGED
data/lib/debug/server.rb
CHANGED
@@ -116,6 +116,8 @@ module DEBUGGER__
|
|
116
116
|
|
117
117
|
self.extend(UI_CDP)
|
118
118
|
@repl = false
|
119
|
+
CONFIG.set_config no_color: true
|
120
|
+
|
119
121
|
@web_sock = UI_CDP::WebSocket.new(@sock)
|
120
122
|
@web_sock.handshake
|
121
123
|
else
|
@@ -306,6 +308,10 @@ module DEBUGGER__
|
|
306
308
|
s.puts "quit"
|
307
309
|
end
|
308
310
|
end
|
311
|
+
|
312
|
+
def after_fork_parent
|
313
|
+
# do nothing
|
314
|
+
end
|
309
315
|
end
|
310
316
|
|
311
317
|
class UI_TcpServer < UI_ServerBase
|
@@ -454,14 +460,27 @@ module DEBUGGER__
|
|
454
460
|
::DEBUGGER__.warn "Debugger can attach via UNIX domain socket (#{@sock_path})"
|
455
461
|
vscode_setup if CONFIG[:open_frontend] == 'vscode'
|
456
462
|
|
457
|
-
|
458
|
-
@
|
459
|
-
|
463
|
+
begin
|
464
|
+
Socket.unix_server_loop @sock_path do |sock, client|
|
465
|
+
@sock_for_fork = sock
|
466
|
+
@client_addr = client
|
467
|
+
|
468
|
+
yield sock
|
469
|
+
ensure
|
470
|
+
sock.close
|
471
|
+
@sock_for_fork = nil
|
472
|
+
end
|
473
|
+
rescue Errno::ECONNREFUSED => _e
|
474
|
+
::DEBUGGER__.warn "#{_e.message} (socket path: #{@sock_path})"
|
460
475
|
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
476
|
+
if @sock_path.start_with? Config.unix_domain_socket_tmpdir
|
477
|
+
# try on homedir
|
478
|
+
@sock_path = Config.create_unix_domain_socket_name(unix_domain_socket_homedir)
|
479
|
+
::DEBUGGER__.warn "retry with #{@sock_path}"
|
480
|
+
retry
|
481
|
+
else
|
482
|
+
raise
|
483
|
+
end
|
465
484
|
end
|
466
485
|
end
|
467
486
|
end
|
data/lib/debug/server_cdp.rb
CHANGED
@@ -14,9 +14,7 @@ module DEBUGGER__
|
|
14
14
|
@sock = s
|
15
15
|
end
|
16
16
|
|
17
|
-
def handshake
|
18
|
-
CONFIG.set_config no_color: true
|
19
|
-
|
17
|
+
def handshake
|
20
18
|
req = @sock.readpartial 4096
|
21
19
|
$stderr.puts '[>]' + req if SHOW_PROTOCOL
|
22
20
|
|
@@ -97,10 +95,11 @@ module DEBUGGER__
|
|
97
95
|
end
|
98
96
|
|
99
97
|
def process
|
98
|
+
bps = []
|
99
|
+
@src_map = {}
|
100
100
|
loop do
|
101
101
|
req = @web_sock.extract_data
|
102
102
|
$stderr.puts '[>]' + req.inspect if SHOW_PROTOCOL
|
103
|
-
bps = []
|
104
103
|
|
105
104
|
case req['method']
|
106
105
|
|
@@ -108,6 +107,7 @@ module DEBUGGER__
|
|
108
107
|
when 'Page.getResourceTree'
|
109
108
|
abs = File.absolute_path($0)
|
110
109
|
src = File.read(abs)
|
110
|
+
@src_map[abs] = src
|
111
111
|
send_response req,
|
112
112
|
frameTree: {
|
113
113
|
frame: {
|
@@ -124,7 +124,7 @@ module DEBUGGER__
|
|
124
124
|
url: "http://debuggee#{abs}",
|
125
125
|
startLine: 0,
|
126
126
|
startColumn: 0,
|
127
|
-
endLine: src.count(
|
127
|
+
endLine: src.count("\n"),
|
128
128
|
endColumn: 0,
|
129
129
|
executionContextId: 1,
|
130
130
|
hash: src.hash
|
@@ -136,7 +136,7 @@ module DEBUGGER__
|
|
136
136
|
}
|
137
137
|
when 'Debugger.getScriptSource'
|
138
138
|
s_id = req.dig('params', 'scriptId')
|
139
|
-
src =
|
139
|
+
src = get_source_code s_id
|
140
140
|
send_response req, scriptSource: src
|
141
141
|
@q_msg << req
|
142
142
|
when 'Page.startScreencast', 'Emulation.setTouchEmulationEnabled', 'Emulation.setEmitTouchEventsForMouse',
|
@@ -169,7 +169,10 @@ module DEBUGGER__
|
|
169
169
|
# breakpoint
|
170
170
|
when 'Debugger.getPossibleBreakpoints'
|
171
171
|
s_id = req.dig('params', 'start', 'scriptId')
|
172
|
-
line = req.dig('params', 'lineNumber')
|
172
|
+
line = req.dig('params', 'start', 'lineNumber')
|
173
|
+
src = get_source_code s_id
|
174
|
+
end_line = src.count("\n")
|
175
|
+
line = end_line if line > end_line
|
173
176
|
send_response req,
|
174
177
|
locations: [
|
175
178
|
{ scriptId: s_id,
|
@@ -180,6 +183,9 @@ module DEBUGGER__
|
|
180
183
|
line = req.dig('params', 'lineNumber')
|
181
184
|
path = req.dig('params', 'url').match('http://debuggee(.*)')[1]
|
182
185
|
cond = req.dig('params', 'condition')
|
186
|
+
src = get_source_code path
|
187
|
+
end_line = src.count("\n")
|
188
|
+
line = end_line if line > end_line
|
183
189
|
if cond != ''
|
184
190
|
bps << SESSION.add_line_breakpoint(path, line + 1, cond: cond)
|
185
191
|
else
|
@@ -202,6 +208,14 @@ module DEBUGGER__
|
|
202
208
|
end
|
203
209
|
end
|
204
210
|
|
211
|
+
def get_source_code path
|
212
|
+
return @src_map[path] if @src_map[path]
|
213
|
+
|
214
|
+
src = File.read(path)
|
215
|
+
@src_map[path] = src
|
216
|
+
src
|
217
|
+
end
|
218
|
+
|
205
219
|
## Called by the SESSION thread
|
206
220
|
|
207
221
|
def readline prompt
|
@@ -269,7 +283,7 @@ module DEBUGGER__
|
|
269
283
|
url: frame[:url],
|
270
284
|
startLine: 0,
|
271
285
|
startColumn: 0,
|
272
|
-
endLine: src.count(
|
286
|
+
endLine: src.count("\n"),
|
273
287
|
endColumn: 0,
|
274
288
|
executionContextId: @script_paths.size + 1,
|
275
289
|
hash: src.hash
|
data/lib/debug/server_dap.rb
CHANGED
@@ -222,14 +222,35 @@ module DEBUGGER__
|
|
222
222
|
@q_msg << 'c'
|
223
223
|
send_response req, allThreadsContinued: true
|
224
224
|
when 'next'
|
225
|
-
|
226
|
-
|
225
|
+
begin
|
226
|
+
@session.check_postmortem
|
227
|
+
@q_msg << 'n'
|
228
|
+
send_response req
|
229
|
+
rescue PostmortemError
|
230
|
+
send_response req,
|
231
|
+
success: false, message: 'postmortem mode',
|
232
|
+
result: "'Next' is not supported while postrmotem mode"
|
233
|
+
end
|
227
234
|
when 'stepIn'
|
228
|
-
|
229
|
-
|
235
|
+
begin
|
236
|
+
@session.check_postmortem
|
237
|
+
@q_msg << 's'
|
238
|
+
send_response req
|
239
|
+
rescue PostmortemError
|
240
|
+
send_response req,
|
241
|
+
success: false, message: 'postmortem mode',
|
242
|
+
result: "'stepIn' is not supported while postrmotem mode"
|
243
|
+
end
|
230
244
|
when 'stepOut'
|
231
|
-
|
232
|
-
|
245
|
+
begin
|
246
|
+
@session.check_postmortem
|
247
|
+
@q_msg << 'fin'
|
248
|
+
send_response req
|
249
|
+
rescue PostmortemError
|
250
|
+
send_response req,
|
251
|
+
success: false, message: 'postmortem mode',
|
252
|
+
result: "'stepOut' is not supported while postrmotem mode"
|
253
|
+
end
|
233
254
|
when 'terminate'
|
234
255
|
send_response req
|
235
256
|
exit
|
@@ -491,7 +512,7 @@ module DEBUGGER__
|
|
491
512
|
case type
|
492
513
|
when :backtrace
|
493
514
|
event! :dap_result, :backtrace, req, {
|
494
|
-
stackFrames: @target_frames.map
|
515
|
+
stackFrames: @target_frames.map{|frame|
|
495
516
|
path = frame.realpath || frame.path
|
496
517
|
ref = frame.file_lines unless path && File.exist?(path)
|
497
518
|
|
data/lib/debug/session.rb
CHANGED
@@ -91,7 +91,7 @@ module DEBUGGER__
|
|
91
91
|
# [:check, expr] => CheckBreakpoint
|
92
92
|
#
|
93
93
|
@tracers = {}
|
94
|
-
@th_clients =
|
94
|
+
@th_clients = {} # {Thread => ThreadClient}
|
95
95
|
@q_evt = Queue.new
|
96
96
|
@displays = []
|
97
97
|
@tc = nil
|
@@ -1358,7 +1358,7 @@ module DEBUGGER__
|
|
1358
1358
|
end
|
1359
1359
|
|
1360
1360
|
def setup_threads
|
1361
|
-
prev_clients = @th_clients
|
1361
|
+
prev_clients = @th_clients
|
1362
1362
|
@th_clients = {}
|
1363
1363
|
|
1364
1364
|
Thread.list.each{|th|
|
@@ -1555,6 +1555,36 @@ module DEBUGGER__
|
|
1555
1555
|
@postmortem = false
|
1556
1556
|
end
|
1557
1557
|
|
1558
|
+
def capture_exception_frames *exclude_path
|
1559
|
+
postmortem_hook = TracePoint.new(:raise){|tp|
|
1560
|
+
exc = tp.raised_exception
|
1561
|
+
frames = DEBUGGER__.capture_frames(__dir__)
|
1562
|
+
|
1563
|
+
exclude_path.each{|ex|
|
1564
|
+
if Regexp === ex
|
1565
|
+
frames.delete_if{|e| ex =~ e.path}
|
1566
|
+
else
|
1567
|
+
frames.delete_if{|e| e.path.start_with? ex.to_s}
|
1568
|
+
end
|
1569
|
+
}
|
1570
|
+
exc.instance_variable_set(:@__debugger_postmortem_frames, frames)
|
1571
|
+
}
|
1572
|
+
postmortem_hook.enable
|
1573
|
+
|
1574
|
+
begin
|
1575
|
+
yield
|
1576
|
+
nil
|
1577
|
+
rescue Exception => e
|
1578
|
+
if e.instance_variable_defined? :@__debugger_postmortem_frames
|
1579
|
+
e
|
1580
|
+
else
|
1581
|
+
raise
|
1582
|
+
end
|
1583
|
+
ensure
|
1584
|
+
postmortem_hook.disable
|
1585
|
+
end
|
1586
|
+
end
|
1587
|
+
|
1558
1588
|
def postmortem=(is_enable)
|
1559
1589
|
if is_enable
|
1560
1590
|
unless @postmortem_hook
|
@@ -1635,20 +1665,7 @@ module DEBUGGER__
|
|
1635
1665
|
end
|
1636
1666
|
|
1637
1667
|
def after_fork_parent
|
1638
|
-
|
1639
|
-
at_exit{
|
1640
|
-
@intercept_trap_sigint = false
|
1641
|
-
trap(:SIGINT, :IGNORE)
|
1642
|
-
|
1643
|
-
if Process.pid == parent_pid
|
1644
|
-
# only check child process from its parent
|
1645
|
-
begin
|
1646
|
-
# wait for all child processes to keep terminal
|
1647
|
-
loop{ Process.waitpid }
|
1648
|
-
rescue Errno::ESRCH, Errno::ECHILD
|
1649
|
-
end
|
1650
|
-
end
|
1651
|
-
}
|
1668
|
+
@ui.after_fork_parent
|
1652
1669
|
end
|
1653
1670
|
end
|
1654
1671
|
|
@@ -1774,8 +1791,8 @@ module DEBUGGER__
|
|
1774
1791
|
def sync &b
|
1775
1792
|
info "sync"
|
1776
1793
|
|
1794
|
+
lock
|
1777
1795
|
begin
|
1778
|
-
lock
|
1779
1796
|
b.call if b
|
1780
1797
|
ensure
|
1781
1798
|
unlock
|
@@ -2012,8 +2029,8 @@ module DEBUGGER__
|
|
2012
2029
|
|
2013
2030
|
parent_hook = -> child_pid {
|
2014
2031
|
DEBUGGER__.warn "Detaching after fork from parent process #{Process.pid}"
|
2015
|
-
SESSION.deactivate
|
2016
2032
|
SESSION.after_fork_parent
|
2033
|
+
SESSION.deactivate
|
2017
2034
|
}
|
2018
2035
|
child_hook = -> {
|
2019
2036
|
DEBUGGER__.warn "Attaching after process #{parent_pid} fork to child process #{Process.pid}"
|
@@ -2112,6 +2129,8 @@ module Kernel
|
|
2112
2129
|
loc = caller_locations(up_level, 1).first; ::DEBUGGER__.add_line_breakpoint loc.path, loc.lineno + 1, oneshot: true, command: cmds
|
2113
2130
|
self
|
2114
2131
|
end
|
2132
|
+
|
2133
|
+
alias bb debugger if ENV['RUBY_DEBUG_BB']
|
2115
2134
|
end
|
2116
2135
|
|
2117
2136
|
class Binding
|
data/lib/debug/version.rb
CHANGED
data/misc/README.md.erb
CHANGED
@@ -11,7 +11,7 @@ New debug.rb has several advantages:
|
|
11
11
|
* [Remote debugging](#remote-debugging): Support remote debugging natively.
|
12
12
|
* UNIX domain socket
|
13
13
|
* TCP/IP
|
14
|
-
*
|
14
|
+
* Integration with rich debugger frontend
|
15
15
|
* VSCode/DAP ([VSCode rdbg Ruby Debugger - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=KoichiSasada.vscode-rdbg))
|
16
16
|
* Chrome DevTools
|
17
17
|
* Extensible: application can introduce debugging support with several ways:
|
@@ -340,7 +340,7 @@ $ RUBY_DEBUG_PORT=12345 ruby target.rb
|
|
340
340
|
|
341
341
|
### Integration with external debugger frontend
|
342
342
|
|
343
|
-
You can attach with external
|
343
|
+
You can attach with external debugger frontend with VSCode and Chrome.
|
344
344
|
|
345
345
|
```
|
346
346
|
$ rdbg --open=[frontend] target.rb
|
@@ -352,7 +352,7 @@ Also `open` command allows opening the debug port.
|
|
352
352
|
|
353
353
|
#### VSCode integration
|
354
354
|
|
355
|
-
If you don't run a debuggee Ruby process on VSCode, you can attach with VSCode later with the
|
355
|
+
If you don't run a debuggee Ruby process on VSCode, you can attach with VSCode later with the following steps.
|
356
356
|
|
357
357
|
`rdbg --open=vscode` opens the debug port and tries to invoke the VSCode (`code` command).
|
358
358
|
|
@@ -364,7 +364,7 @@ Launching: code /tmp/ruby-debug-vscode-20211014-27706-gd7e85/ /tmp/ruby-debug-vs
|
|
364
364
|
DEBUGGER: Connected.
|
365
365
|
```
|
366
366
|
|
367
|
-
And it
|
367
|
+
And it tries to invoke the new VSCode window and VSCode starts attaching to the debuggee Ruby program automatically.
|
368
368
|
|
369
369
|
You can also use `open vscode` command in REPL.
|
370
370
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: debug
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Koichi Sasada
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: irb
|
@@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '0'
|
113
113
|
requirements: []
|
114
|
-
rubygems_version: 3.
|
114
|
+
rubygems_version: 3.1.6
|
115
115
|
signing_key:
|
116
116
|
specification_version: 4
|
117
117
|
summary: Debugging functionality for Ruby
|