调试器:在进程<pid1>分叉后附加到子进程<pid2>



当使用ruby调试gem时,我经常看到打印出以下输出:

DEBUGGER: Attaching after process <pid1> fork to child process <pid2>

其中<pid1>是类似于12345的父进程id,而<pid2>是新分叉的子进程id,类似于55555。

这是怎么回事?它与连接到Spring或Zeus等应用程序预加载程序有什么关系吗?

它来自以下代码:https://github.com/ruby/debug/blob/4af8c25140a7a672db852954b6a1733b3169b608/lib/debug/session.rb#L2129-L2162

实际情况是,您的主Ruby进程正在分叉一个新进程,它告诉您调试器正在附加到进程id为<pid2>的新创建的子进程,因此它也可以中断以调试事件。

在我的案例中,这是在自动测试中调用visit <url>时发生的,由于有一个Capybara Selenium网络驱动程序,该测试创建了一个新的子进程来启动Chrome进程以呈现请求的HTML。

默认情况下,ruby调试gem将同时连接到父进程和子进程。但是,您可以通过使用RUBY_DEBUG_FORK_MODE环境变量来重写,以仅激活子级或父级的调试器。

需要明确的是,它与Spring或Zeus等应用程序预加载程序无关。

最新更新