0

我正在尝试为守护程序编写一个插件,现在我处于最后阶段。所以我想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

关于为什么我得到完全没有用的输出的任何想法?

PS:a.out 编译时所有调试标志都打开

4

1 回答 1

1

我相信问题出在addr2line.
您应该尝试阅读原文raw.log,看看是否有意义。
取一个可疑的分配,在原始日志中找到它,运行objdump -lrd a.out并找到流水线。应该是调用malloc. 如果是错就是错addr2line,如果不是错就是错mtrace

一些可能的陷阱:
1. 编译a.out时没有-g.
2. 运行一个并给a.out另一个。 3. 在错误的源代码版本中搜索您获得的行号。a.outaddr2line

PS你没有类似的东西#define UNIT (malloc(1000),7),是吗?

于 2012-06-12T12:21:05.373 回答