我试图为一个守护进程编写一个插件,现在我正处于最后阶段。因此,我考虑了mtrace来查找内存泄漏,因为我看不到启动valgrind实例的任何可能方法(我没有运行实际的守护进程,而是运行一个检查一些配置文件的启动进程,然后启动守护进程)。
所以,当我查看mtrace中的日志时,我看到了很多非常不准确的信息。例如,它说index += UNIT是一个永远不会释放的内存分配,还有很多类似的东西。
我正在为mtrace运行以下命令:
mtrace ./a.out memory > raw.log; cat raw.log | tr -s " " " " | cut -d" " -f4 > err.log; cat err.log | addr2line -e a.out > fin.log
关于为什么我得到完全无用的输出有什么想法吗?
P.S.:编译a.out时,所有调试标志都打开

最佳答案

我认为问题出在addr2line上。
你应该试着读一下原文,看看它是否有意义。
获取一个可疑的分配,在原始日志中找到它,运行raw.log并找到装配线。它应该是对objdump -lrd a.out的调用。如果是malloc的故障,如果不是,则是addr2line的故障。
一些可能的陷阱:
一。编译mtrace而不编译a.out
2。运行一个-g并将另一个a.out赋给a.out
三。正在搜索源的不正确版本中的行号。
另外,你没有类似的东西,是吗?

关于c - mtrace精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10987930/

10-10 09:02