代码之家  ›  专栏  ›  技术社区  ›  achristi

用Valgrind调试PHP内存损坏

  •  1
  • achristi  · 技术社区  · 16 年前

    我在PHP中遇到了一个似乎是内存损坏的问题。我有一个庞大的代码库,我正在将其移植到5.3运行时。我得到了segfaults和“zend_mm_heap corrupted”错误,但这些点的回溯没有用处。回溯总是指向各种核心PHP函数,例如变量赋值或串联。

    据我所知,PHP的内存在SEGFULTS/heap损坏错误发生之前的某个时间点损坏。

    我遵循了bugs的说明。php。net/bug获取valgrind日志。php和生成了一个相当大的valgrind日志。它充满了许多错误,比如“条件跳转或移动取决于未初始化的值”。因为valgrind日志中有太多信息,我不确定什么是真正的缺陷,什么是正常行为。

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

    1 回复  |  直到 16 年前
        1
  •  1
  •   mark4o    16 年前

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