如何在PHP中跟踪segfault

如何在PHP中跟踪segfault,php,segmentation-fault,Php,Segmentation Fault,我正在用PHP开发一个小的ish应用程序。几天前,当我尝试在应用程序中加载和处理一些数据时,PHP开始在我的开发机器(不是prod服务器)上出错 我连接了gdb,试图看看segfault发生在哪里,但基本上什么也没有得到。回溯包含一堆类似于调用函数的东西(大约50个),最后一个函数是一个mpm\u prefork东西。我认为这是mpm\u prefork的错误,所以我安装了php fpm并尝试使用mpm\u event,但它仍然存在故障 我注意到,如果我从数据库中删除所有数据(我使用的是SQLi

我正在用PHP开发一个小的ish应用程序。几天前,当我尝试在应用程序中加载和处理一些数据时,PHP开始在我的开发机器(不是prod服务器)上出错

我连接了gdb,试图看看segfault发生在哪里,但基本上什么也没有得到。回溯包含一堆类似于调用函数的东西(大约50个),最后一个函数是一个
mpm\u prefork
东西。我认为这是
mpm\u prefork
的错误,所以我安装了php fpm并尝试使用
mpm\u event
,但它仍然存在故障

我注意到,如果我从数据库中删除所有数据(我使用的是SQLite),它将不再segfault,所以我尝试将数据导出到MySQL数据库中,但它仍然segfault

总之,当db中的数据被加载并处理为输出时,似乎会发生SEGFULT

我使用的是PHP5.5.12和Apache2.4.9,我相信这两个版本都是最新的

我的问题是:当segfault发生时,我能以某种方式打印PHP的堆栈吗?或者我可以让PHP在某个地方记录每个函数调用,看看是什么函数调用导致崩溃

另外,PHP是否有堆栈限制?我可能会调用很多函数吗?(就我所记得的,这个过程中没有递归。)


谢谢。

您是否尝试过单步执行PHP代码直到出现seg错误?也就是说,尝试禁用所有未使用的扩展,并确保您的PHP二进制文件都是最新的?我没有使用xdebug的经验,如果这就是你的意思。。。编辑:如果需要,我可以学习;-)(AFAIK)不可能将PHP堆栈跟踪转储到segfault上——此时,PHP已死亡,无法恢复。PHP有堆栈限制吗?是的,绝对如此,但达到极限通常不会导致SEG故障。如果您不能使用xdebug,您可能不得不求助于“老式”的调试方式,在代码中散布
echo
print\r
语句,并查看其失败的地方。好的,谢谢。我将研究xdebug,看看是否可以使用它……请注意,如果您得到一个segfault,它是PHP或其中一个扩展中的一个bug,可能不是脚本中的bug。尽管您的脚本可能正在执行某些操作来触发错误。您可能应该检查PHP bug跟踪器,看看segfault是否为已知错误。