Mar*_*vac 8 linux apache valgrind memory-leaks
在Apache httpd和httpd模块中查找内存泄漏的最佳方法是什么?
有什么声音吗?
我尝试了一点valgrind,但很少出现障碍:
操作系统:Linux
PS:
Valgrind命令: $ valgrind --leak-check=full --leak-resolution=med --log-file=/tmp/valgrind.log ./bin/httpd -X
Valgrind输出示例:http://paste-it.net/public/x5b6e8b/
小智 2
我不知道有什么灵丹妙药,但你可以看看 valgrind/valgrind.h ,它有一些有用的宏,可以让 Valgrind 意识到并改变它们在 Valgrind 下运行时的行为。
例如
#ifndef HAVE_VALGRIND_VALGRIND_H
#define RUNNING_ON_VALGRIND 0
#else
#include <valgrind/valgrind.h>
#endif
if (RUNNING_ON_VALGRIND) {
printf("Hello, this is Valgrind instance %d\n", RUNNING_ON_VALGRIND);
/* set debug output annoyingly high */
/* exit after one request */
}
Run Code Online (Sandbox Code Playgroud)
您还可以将整个混乱包裹起来,NDEBUG使其远离生产版本。
这应该可以让您不必在每次调试时摆弄服务器,如果检测到 Valgrind,它就会“直接执行”。RUNNING_ON_VALGRIND 将扩展到 valgrind 实例,或者如果不适用则保留为 0。
对于其余部分(我想象您会收到大量噪音,最有可能从 开始invalid read of size xx),您可以系统地应用抑制。如果您发布一些输出,则可以更轻松地为可以粘贴在文件中的抑制提出建议。
顺便说一下,Valgrind 用户的邮件列表非常有帮助并且非常宽容。您还可以在那里发布您最烦人且不相关的噪音,您会得到有关如何快速抑制它的回复。
如果您想要的只是泄漏的摘要以及导致泄漏的入口点,那么关闭几乎所有其他内容应该不会太困难。