8

当我valgrind --leak-check=yes在一个程序上运行时,报告了几个字节的内存丢失。是否可以查看该内存的内容(即转储存储在其中的数据)?

4

1 回答 1

12

您可以使用最新版本的 Valgrind (3.8.1) 做到这一点:

启动可执行文件,在启动时激活 gdbserver:

valgrind --vgdb-error=0 ....<your program>

然后在另一个窗口中,将 gdb 连接到 Valgrind(按照 Valgrind 给出的指示)。然后在相关位置(例如在 main 的末尾)放置一个断点并使用 gdb

continue

命令直到到达断点。然后从 gdb 进行泄漏搜索:

   monitor leak_check full reachable any

然后列出相关丢失记录 nr 的可达块的地址

   monitor block_list <loss_record_nr>

然后,您可以使用 gdb 功能检查给定地址的内存。如果您正在搜索谁保存了指向此内存的指针,请注意可能有趣的命令“who_points_at”。

于 2012-10-04T20:34:12.710 回答