debug 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
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