在GDB中,如何找出哪些malloc在堆上的地址?

kiz*_*zx2 7 memory debugging heap gdb

我在GDB中有一个指针,我怎样才能找到它首先在堆上分配的位置?

在WinDBG中,这可以!heap -p -a <0x12345678>在打开后完成gflags /i <*exe> +ust

既然Valgrind可以告诉我内存的分配位置(当它检测到一些泄漏时),我猜这也有可能吗?

(这不是关于观察点.这是我随机闯入In GDB,应用程序,查看指针并想知道"谁创建了这段内存"的情况?)


在GDB中使用反向调试是一种非常新颖的方式,可能是解决此问题的正确方法.我用GDB 7.1遇到了一些问题 - 最新的稳定版本.反向调试是GDB中的一个相当新的功能,所以我需要检查HEAD(7.2)来修复它.

它可能说明了GDB方法的成熟性,但我认为它应该在它更成熟时使用.(很棒的功能!)

ks1*_*322 7

也许反向调试会有所帮助.尝试在内存地址上设置观察点并反向继续直到写入内存.

(gdb) watch *0x12345678
(gdb) reverse-continue
Run Code Online (Sandbox Code Playgroud)


Nik*_*sov 4

Valgrind 劫持内存管理调用,这就是堆检查器的工作原理。GDB 本身没有任何工具可以告诉您 给定地址返回的位置malloc(3)。我建议研究mtraceglibc 分配调试