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

C++ 转储内存以查找C+中的内存泄漏+;应用,c++,linux,gdb,C++,Linux,Gdb,给定linux中的活动/实时进程,如何转储内存以分析内存泄漏 我通常使用valgrind,但不幸的是,valgrind使应用程序运行极慢,无法使用其他服务器上的其他进程完成初始化 本文中的一个尝试性答案建议使用diffing/proc/[PID]/smap来定位正在增长的内存区域 我试过了,差异包括: +02511000-2eb548000 rw-p 00000000 00:00 0 [heap] +Size:

给定linux中的活动/实时进程,如何转储内存以分析内存泄漏

我通常使用valgrind,但不幸的是,valgrind使应用程序运行极慢,无法使用其他服务器上的其他进程完成初始化

本文中的一个尝试性答案建议使用diffing
/proc/[PID]/smap
来定位正在增长的内存区域

我试过了,差异包括:

+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.
然后,我分离并意识到转储文件是空的,也就是零字节

我错过什么了吗

(gdb)转储内存。/dump_outputfile.dump 0x02511000x2E2548000

你确定地址吗

你要倾倒的区域大约是11英尺

这对gdb来说太多了吗?试试小一点的


当然,请检查您是否有足够的可用磁盘空间用于结果转储内存。

(gdb)./dump_outputfile.dump 0x02511000x2E2548000
您确定地址吗?您要转储的区域大约为11Gb!是的,这就是为什么我想甩掉它,弄清楚到底发生了什么。因为它是11GB,所以基于转储的情况一定非常明显。如果转储较小的内存范围,追加是什么?只是为了try@bruno好主意——如果我转储200MB,它就会工作。谢谢如果你能找到极限,那就太好了!好的,所以我取消了我的答案,为了加强其他读者的可视性,请在您知道最大尺寸时将其放在答案的备注处。我没有看到gdb文档中的限制,您必须进行一些尝试