Valgrind 是许多 Unix 环境下使用的知名工具,可以在任何 C/C++ 编写的软件中调试许多常见的内存问题。 Valgrind 是有关内存调试的多功能前端工具。最常用的底层工具称为 “memcheck”。它的工作方式是用自己的堆分配替换每个 libc 的堆分配,并跟踪你对它们所做的事情。你可能还会对 “massif” 感兴趣:它是一个内存跟踪器,对于了解程序的常规堆内存使用情况非常有用。
注意
你应该阅读 Valgrind 文档,以进一步了解。 它写得很好,带有一些典型的例子。
为了进行内存分配替换,你需要通过 valgrind 运行要分析的程序(此处为 PHP),也就是启动 valgrind 二进制文件。
当 valgrind 替换并跟踪所有 libc 的堆分配时,它往往会大大降低调试程序的速度。对于 PHP,你会注意到它。尽管 PHP 的速度下降并不那么剧烈,但是仍然可以清楚地感觉到;如果你注意到它,不用担心,这是正常的。
Valgrind 不是你可能会使用的唯一工具,但是是最常用的工具。还有其他工具,例如 Dr.Memory、LeakSanitizer、Electric Fence、AddressSanitizer。
在开始之前
以下是在存储器调试方面具有良好经验并减轻发现缺陷并减少调试时间的机会所需的步骤:
https://learnku.com/docs/php-internals/php7/memory-debugging/7230
https://www.valgrind.org/docs/manual/ms-manual.html
https://www.valgrind.org/docs/manual/mc-manual.html
https://www.valgrind.org/
http://www.phpinternalsbook.com/php7/memory_management/zend_memory_manager.html