debug 1.3.0 → 1.3.4
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/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
|