XDebug 可以调试使用 pcntl_fork() 的 PHP CLI 脚本吗?


Can XDebug debug a PHP CLI script that uses pcntl_fork()?

我有一个用PHP编写的CLI脚本,我正在尝试用XDebug进行调试。调试器正在工作,因为我可以在初始化时单步执行代码,但它在进程分叉后崩溃,成为守护程序,并让原始进程退出。我的理论是,当初始进程终止时,XDebug 套接字会关闭,这使得守护程序及其分叉的任何进程都没有打开的套接字到我的 XDebug 侦听器。

数据库连接可以在分叉后重新连接甚至创建,但 XDebug 的功能列表中似乎没有这样的选项。XDebug 套接字能否在初始进程退出后幸存下来,或者在调用 pcntl_fork() 后重新建立?有什么解决方法吗?

不,Xdebug 不处理跨多个进程的套接字。你的理论是对的。套接字根本无法轻易地复制到分叉上,Xdebug 目前不处理这个问题。进程结束时,套接字也会关闭。

有一个问题(https://bugs.xdebug.org/view.php?id=938),您对此发表了评论。可以解决这个问题——我已经用旧的MongoDB扩展做了类似的事情——但它在我的优先级列表中并不高。