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

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

在使用rubydebug gem时,我经常看到打印出如下输出:

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

其中 <pid1> 是父进程 ID,如 12345,<pid2> 是新分叉的子进程 ID,如 55555。

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

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

发生的事情是您的 Ruby 主进程正在分叉一个新进程,它告诉您调试器正在附加到进程 ID <pid2> 的 newly-created 子进程, 这样它也可以因调试事件而中断。

在我的例子中,这是在自动测试中调用 visit <url> 时发生的,由于有 Capybara Selenium webdriver,创建了一个新的子进程来启动 Chrome 进程来渲染请求的 HTML.

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

明确地说,它与 Spring 或 Zeus 等应用程序预加载器无关。