debug 1.3.0 → 1.3.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: adddd814397fedb45de84db6ccb2dc49c3aefae141e73b156e3b87c29a3edf60
4
- data.tar.gz: 0b0cb92d077f04ed9f7bfa1f79f56f35dc4dc9054f27ea3608d23c5f0d462274
3
+ metadata.gz: 948301b2d85d9acb8758ae20e63a60d0253dc1d1e1bf5c2ddc276abb39d12993
4
+ data.tar.gz: 2e6b7c89ee568710d52d3fcaff1ff5eb44db71c4e296e039a6f21f4e5de9b9ee
5
5
  SHA512:
6
- metadata.gz: 3e60eb57c1ec6c164d6956e777f8ac52e15ba84c13b97443650ac67f2b503397cfc57d9f0b897f331946e7200067227d61e7b81f459c5b42e44098dbbe9161ef
7
- data.tar.gz: 3a377c3da4482103142fbece04cb896522f952aa3d43f316f50dd699f35f0c24db100df3e706e6d86cbc752021800bbfdff6131a95023d497741d68c396e5ed7
6
+ metadata.gz: dd5237c7fc194760f33cdd97c007fe1c879ed4140342821972d2385a612bd5fd4c8faffd2a3763adea1378931be13e65d46e2a23f5997412ac96c6e7c802e0d2
7
+ data.tar.gz: 396eab432e765065288f49cda52ce8a4449ee6c97465bde2ef70ec8ca39678b80831748b551d6aa6e4417c1c6512b8b0f8caf4371516a9178181582b9bf9542c
data/lib/debug/client.rb CHANGED
@@ -91,9 +91,7 @@ module DEBUGGER__
91
91
  @console.readline "(rdbg:remote\##{@pid}) "
92
92
  else
93
93
  @console.readline "(rdbg:remote) "
94
- end.tap{|line|
95
- p readline: line
96
- }
94
+ end
97
95
  end
98
96
 
99
97
  def connect_unix name = nil
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.unix_domain_socket_dir
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
- case
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
- if File.exist?(path)
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
- when home = ENV['HOME']
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
- case
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 for UNIX domain socket directory.'
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
@@ -40,7 +40,7 @@ module Kernel
40
40
  end
41
41
  end
42
42
 
43
- alias b debugger if ENV['RUBY_DEBUG_B']
43
+ alias bb debugger if ENV['RUBY_DEBUG_BB']
44
44
  end
45
45
 
46
46
  class Binding
data/lib/debug/server.rb CHANGED
@@ -306,6 +306,10 @@ module DEBUGGER__
306
306
  s.puts "quit"
307
307
  end
308
308
  end
309
+
310
+ def after_fork_parent
311
+ # do nothing
312
+ end
309
313
  end
310
314
 
311
315
  class UI_TcpServer < UI_ServerBase
@@ -454,14 +458,27 @@ module DEBUGGER__
454
458
  ::DEBUGGER__.warn "Debugger can attach via UNIX domain socket (#{@sock_path})"
455
459
  vscode_setup if CONFIG[:open_frontend] == 'vscode'
456
460
 
457
- Socket.unix_server_loop @sock_path do |sock, client|
458
- @sock_for_fork = sock
459
- @client_addr = client
461
+ begin
462
+ Socket.unix_server_loop @sock_path do |sock, client|
463
+ @sock_for_fork = sock
464
+ @client_addr = client
460
465
 
461
- yield sock
462
- ensure
463
- sock.close
464
- @sock_for_fork = nil
466
+ yield sock
467
+ ensure
468
+ sock.close
469
+ @sock_for_fork = nil
470
+ end
471
+ rescue Errno::ECONNREFUSED => _e
472
+ ::DEBUGGER__.warn "#{_e.message} (socket path: #{@sock_path})"
473
+
474
+ if @sock_path.start_with? Config.unix_domain_socket_tmpdir
475
+ # try on homedir
476
+ @sock_path = Config.create_unix_domain_socket_name(unix_domain_socket_homedir)
477
+ ::DEBUGGER__.warn "retry with #{@sock_path}"
478
+ retry
479
+ else
480
+ raise
481
+ end
465
482
  end
466
483
  end
467
484
  end
data/lib/debug/session.rb CHANGED
@@ -1635,20 +1635,7 @@ module DEBUGGER__
1635
1635
  end
1636
1636
 
1637
1637
  def after_fork_parent
1638
- parent_pid = Process.pid
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
- }
1638
+ @ui.after_fork_parent
1652
1639
  end
1653
1640
  end
1654
1641
 
@@ -1774,8 +1761,8 @@ module DEBUGGER__
1774
1761
  def sync &b
1775
1762
  info "sync"
1776
1763
 
1764
+ lock
1777
1765
  begin
1778
- lock
1779
1766
  b.call if b
1780
1767
  ensure
1781
1768
  unlock
@@ -2012,8 +1999,8 @@ module DEBUGGER__
2012
1999
 
2013
2000
  parent_hook = -> child_pid {
2014
2001
  DEBUGGER__.warn "Detaching after fork from parent process #{Process.pid}"
2015
- SESSION.deactivate
2016
2002
  SESSION.after_fork_parent
2003
+ SESSION.deactivate
2017
2004
  }
2018
2005
  child_hook = -> {
2019
2006
  DEBUGGER__.warn "Attaching after process #{parent_pid} fork to child process #{Process.pid}"
@@ -2112,6 +2099,8 @@ module Kernel
2112
2099
  loc = caller_locations(up_level, 1).first; ::DEBUGGER__.add_line_breakpoint loc.path, loc.lineno + 1, oneshot: true, command: cmds
2113
2100
  self
2114
2101
  end
2102
+
2103
+ alias bb debugger if ENV['RUBY_DEBUG_BB']
2115
2104
  end
2116
2105
 
2117
2106
  class Binding
data/lib/debug/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DEBUGGER__
4
- VERSION = "1.3.0"
4
+ VERSION = "1.3.1"
5
5
  end
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.0
4
+ version: 1.3.1
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-20 00:00:00.000000000 Z
11
+ date: 2021-10-22 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.3.0.dev
114
+ rubygems_version: 3.1.6
115
115
  signing_key:
116
116
  specification_version: 4
117
117
  summary: Debugging functionality for Ruby