TCMalloc内存泄漏调试

时间:2018-02-15 16:38:04

标签: c++ c memory-leaks tcmalloc pprof

我用tcmalloc编译了一个应用程序并使用HEAPPROFILE环境变量来获取堆文件

每10MB左右创建一个新的堆文件,根据tcmalloc页面,我可以使用pprof工具比较堆文件,看看有哪些额外的非释放对象(可能泄漏)。

pprof --text  myapp --base=myapp.0001.heap myapp.0047.heap 

结果是:     ...     总计:4600.7 MB

4592.3  99.8%  99.8%   4592.3  99.8% 0x00000000009f1d25
7.3   0.2% 100.0%      7.3   0.2% 0x00000000009f1cfc
1.0   0.0% 100.0%      1.0   0.0% 0x00000000009f74f1
0.0   0.0% 100.0%   4600.7 100.0% 00007f07fe149b44
0.0   0.0% 100.0%   4600.7 100.0% 0x0000000000480da1
0.0   0.0% 100.0%   4600.7 100.0% 0x00000000004b5a3e

0x00000000009f1d25是个不错的地址,但我对这些数据无能为力。

我尝试在helloworld应用程序中运行相同的程序

pprof --text  helloworld  helloworld.0001.heap 
Using local file helloworld.
Using local file helloworld.0001.heap.
Total: 9.5 MB
9.5 100.0% 100.0%      9.5 100.0% BigNumber::BigNumber
0.0   0.0% 100.0%      0.0   0.0% __GI__IO_file_doallocate
0.0   0.0% 100.0%      9.5 100.0% main
0.0   0.0% 100.0%      0.0   0.0% _IO_new_file_overflow
0.0   0.0% 100.0%      0.0   0.0% _IO_new_file_xsputn
0.0   0.0% 100.0%      0.0   0.0% __GI__IO_doallocbuf
0.0   0.0% 100.0%      0.0   0.0% __GI__IO_fwrite
0.0   0.0% 100.0%      9.5 100.0% __libc_start_main
0.0   0.0% 100.0%      9.5 100.0% _start
0.0   0.0% 100.0%      0.0   0.0% std::__ostream_insert
0.0   0.0% 100.0%      0.0   0.0% std::operator<< 

在这里我们可以清楚地看到所有函数都有明确的名称,泄漏来自BigNumber构造函数。

有人能指出我正确的方向来获得上述地址的含义吗?

0 个答案:

没有答案