c++ - 将 mtrace 用于 c++

标签 c++

当我在我的 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/

相关文章:

c++ - 带有结构成员字符数组的 sscanf

c++ - 类成员在类定义中是否需要以 `class::`为前缀?

c++ - 结构的互锁交换

c++ - Unresolved inclusion : Eclipse Not Showing "Includes" tab under "Paths and Symbols":

c++ - 多个隐式转换运算符

c++ - 指针的部分特化,C++

c++ - C++ 标准库上的 sizeof()

c++ - 对象构造函数的静态库 "Undefined Reference"

c++ - 从堆中为数组分配地址

c++ - 选择没有重复的随机坐标?