module DEBUGGER__::ForkInterceptor
Public Instance Methods
_fork()
click to toggle source
Calls superclass method
# File debug-1.6.3/lib/debug/session.rb, line 2244 def _fork return super unless defined?(SESSION) && SESSION.active? parent_hook, child_hook = __fork_setup_for_debugger super.tap do |pid| if pid != 0 # after fork: parent parent_hook.call pid else # after fork: child child_hook.call end end end
fork(&given_block)
click to toggle source
Calls superclass method
# File debug-1.6.3/lib/debug/session.rb, line 2260 def fork(&given_block) return super unless defined?(SESSION) && SESSION.active? parent_hook, child_hook = __fork_setup_for_debugger if given_block new_block = proc { # after fork: child child_hook.call given_block.call } super(&new_block).tap{|pid| parent_hook.call(pid)} else super.tap do |pid| if pid # after fork: parent parent_hook.call pid else # after fork: child child_hook.call end end end end
Private Instance Methods
__fork_setup_for_debugger()
click to toggle source
# File debug-1.6.3/lib/debug/session.rb, line 2285 def __fork_setup_for_debugger fork_mode = CONFIG[:fork_mode] if fork_mode == :both && CONFIG[:parent_on_fork] fork_mode = :parent end parent_pid = Process.pid # before fork case fork_mode when :parent parent_hook = -> child_pid { # Do nothing } child_hook = -> { DEBUGGER__.warn "Detaching after fork from child process #{Process.pid}" SESSION.deactivate } when :child SESSION.before_fork false parent_hook = -> child_pid { DEBUGGER__.warn "Detaching after fork from parent process #{Process.pid}" SESSION.after_fork_parent SESSION.deactivate } child_hook = -> { DEBUGGER__.warn "Attaching after process #{parent_pid} fork to child process #{Process.pid}" SESSION.activate on_fork: true } when :both SESSION.before_fork parent_hook = -> child_pid { SESSION.process_group.after_fork SESSION.after_fork_parent } child_hook = -> { DEBUGGER__.warn "Attaching after process #{parent_pid} fork to child process #{Process.pid}" SESSION.process_group.after_fork child: true SESSION.activate on_fork: true } end return parent_hook, child_hook end