XDebug能够调试使用pcntl_fork()的PHP CLI脚本吗?

3
我有一个用PHP编写的CLI脚本,我正在尝试使用XDebug进行调试。调试器正在工作,因为我可以在代码初始化时一步一步地执行,但在进程分叉、成为守护程序并让原始进程退出后,它会崩溃。我的理论是当初始进程终止时,XDebug套接字被关闭,这使得守护进程和它派生的任何进程都没有打开到我的XDebug侦听器的套接字。数据库连接可以在分叉之后重新连接或甚至创建,但是XDebug似乎在其函数列表中没有这样的选项。XDebug套接字是否可以在初始进程退出后存活或在调用pcntl_fork()后重新建立?是否有任何解决此问题的方法?

我认为Xdebug不应该在初始进程终止后仍然存在。这里的问题是为什么您需要使用pcntl_fork() - Charlotte Dunois
因为该脚本是一个守护进程,它处理监听套接字上的特殊请求。一切都运行良好,这不是“使用cron代替”的情况,但调试器似乎对pcntl_fork()(就像DB扩展一样)毫不知情,但又没有提供手动重新打开连接的方法。 - jimp
这可能会对您有所帮助 http://stackoverflow.com/questions/17648097/how-do-you-debug-a-long-running-php-script - Charlotte Dunois
1个回答

2
不,Xdebug不能处理跨多个进程的套接字。您的理论有点正确。在fork时,套接字无法轻松复制,而且Xdebug目前也无法处理此问题。当进程结束时,套接字也会关闭。
您曾在一个问题(https://bugs.xdebug.org/view.php?id=938)上发表过评论。虽然可以修复这个问题——我曾用旧的MongoDB扩展程序做过类似的事情——但这并不是我的优先事项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接