当我在我的 c++ 程序中使用 mtrace 时,我得到如下输出
内存未释放:
Address Size Caller
0x0804a3c8 0x4 at 0x400b159f
我如何知道代码中 0x400b159f 的位置?
最佳答案
在许多 unix 系统上,您还可以使用 addr2line 实用程序将地址映射回文件名和行号。此实用程序要求使用调试标志(-g 表示 gcc)编译代码。对于名为 wombat 的程序,您可以像这样使用它:
addr2line -e wombat 0x400b159f
它会打印出类似的东西
wombat_helper.c:1023
如果你得到 ??:0 则找不到函数。
更新: mtrace 报告的内存地址是调用 malloc 和 free 函数的位置。对于 C++,这几乎总是在 new 和 delete 运算符中,因此用途非常有限,没有其他信息,例如堆栈跟踪来告诉程序中的 new 或 delete 运算符是从哪里调用的。
关于c++ - 将 mtrace 用于 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2256870/