【问题标题】:Debugging PHP Memory Corruption with Valgrind使用 Valgrind 调试 PHP 内存损坏
【发布时间】:2010-02-17 15:09:09
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php memory segmentation-fault valgrind


    【解决方案1】:

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

    【讨论】:

    • 感谢您的反馈。我们能够将该问题隔离为 mbstring 扩展的问题。我们还没有查明这个问题,但我们现在可以在没有 mbstring 的情况下相处。
    猜你喜欢
    • 2012-06-13
    • 2012-07-05
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多