转储内存以查找C ++应用程序中的内存泄漏

时间:2019-01-15 08:40:37

标签: c++ linux gdb

鉴于linux中有一个活动/活动进程,我该如何转储内存以分析内存泄漏?

我通常使用valgrind,但是不幸的是,valgrind使得应用程序运行非常缓慢,以至于无法完成与其他服务器上其他进程的初始化。

post中的尝试答案之一是建议与/proc/[PID]/smaps进行比较以找到正在增长的内存区域。

我尝试过,差异包含:

+02511000-2eb548000 rw-p 00000000 00:00 0                                 [heap]
+Size:           12206300 kB
+Rss:            12105644 kB
+Pss:            12105644 kB

然后我尝试使用gdb附加到实时进程并执行:

(gdb) dump memory ./dump_outputfile.dump 0x02511000 0x2e2548000
./dump_outputfile.dump: Success.

然后,我分离并意识到转储文件是空的,也就是零字节。

我想念什么吗?

1 个答案:

答案 0 :(得分:2)

  

(gdb)转储内存./dump_outputfile.dump 0x02511000 0x2e2548000

您确定地址吗?

您要转储的区域约为11Go!

对于gdb来说太多了吗?尝试使用较小的尺寸

当然请检查您是否有足够的可用磁盘空间来存储结果