gperftools检查内存泄露/越界等问题的简易说明

大名鼎鼎的Google的内存检查工具

1 编译gperftools

本身库的编译没啥好说的,标准流程,需要automake支持

./autogen.sh
./configure
make && make install

2 编译应用程序

在实际工程的Makefile中添加LIB库依赖.
一般来说 -ltcmalloc就可以了
如果需要使用Profiler的功能,那么用 -ltcmalloc_and_profiler
如果需要检查数组越界等,那么需要用 -ltcmalloc_debug(会大大降低处理速度)

3 运行程序获取快照

  1. 启动前设置以下环境变量
CPUPROFILE=分析结果路径,建议完整路径
#即SIGUSR2,如果想要SIGUSR1那就10
CPURPOFILESIGNAL=12
  1. 在需要捕获一次快照时, kill -s 12 pid
    此时在你的设定目录下,会生成一次快照。文件名为CPUPROFILE+".0001",数字递增
  • 请务必保证SIGPROF信号不被捕获,否则会影响正常运行
  • 你设定的快照触发的信号量,同样也不能被捕获

4 对比快照

建议安装graphviz(需要dot这个命令),可以支持导出成PDF,形成一个新增/减少元素的调用关系图。

pprof --pdf --base=<老的一次HEAP> <程序名> <新的HEAP> > result.pdf

可以增加参数 --lines 详细到行。

5 高阶使用

在某些时候,因为信号量被劫持,或希望在某个事务完成后,通过程序触发一次快照的生成,可以如下操作

#include <heap-profiler.h>

if (IsHeapProfilerRunning() == 0)
    HeapProfilerStart("myheap");
HeapProfilerDump("");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值