C++排查派生类内存泄漏步骤
1、pmap命令找出最大块内存区域
pmap [pid],找出最大块内存区域,一般即为堆内存区域
1 | pmap [pid] |
2、gcore产生core文件
1 | $gcore [pid] |
3、获取内存空间
64bit下,一个指针占8字节,5666356*1024/8=725293568
于是用gdb打印内存空间
1 | $gdb [binfile] [corefile] |
上述命令,会把内存中的内容,按照指针进行解读,保存在gdb.txt文件中。
等一会,此时gdb.txt
此时gdb.txt不太好看出来类名是什么,可以用c++filt命令转换一下
1 | cat gdb.txt|c++filt > demo.txt |
4、统计输出内容
根据demo.txt第五列(即类名)进行统计排序
1 | cat demo.txt | awk '{print $5}'|sort|uniq -c | sort -nr | head -10 |
此时大概率是metaq内存泄露
本文落笔于 2022-04-14
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 一知半解!