使用Valgrind调试PHP内存损坏

时间:2010-02-17 15:09:10

标签: php memory segmentation-fault valgrind

我遇到了似乎是PHP的内存损坏问题。我有一个很大的代码库,我移植到5.3运行时。我得到段错误和“zend_mm_heap损坏”错误,但这些点的回溯是没用的。回溯总是导致各种核心PHP函数,例如变量赋值或连接。

据我所知,在发生段错误/堆损坏错误之前,PHP的内存在某些时候会被破坏。

我已按照bugs.php.net/bugs-getting-valgrind-log.php中的说明操作,并生成了一个非常大的valgrind日志。它充满了许多错误,如“条件跳转或移动取决于未初始化的值”。因为valgrind日志中有太多信息,我不确定什么是真正的缺陷,什么是正常行为。

这是valgrind输出的一部分:http://pastie.org/private/exngtften3jeppqyjn4hw

1 个答案:

答案 0 :(得分:1)

您发布的所有错误都是使用未初始化的值。使用valgrind选项--track-origins=yes(在valgrind 3.4.0中添加)来显示最终未使用的值的原点。它将运行得更慢并使用更多内存,但可以显示更多有用信息,以便使用未初始化的值。