使用libumem定位memory leak和memory corruption(3)

本文介绍了如何使用libumem工具来定位C++程序中的内存泄漏问题。通过实例展示了libumem的使用方法,包括通过gcore生成核心文件、使用mdb工具分析内存泄漏,并讲解了libumem判断内存泄漏的标准。同时,文章讨论了在复杂情况下如何分析内存泄漏的难点,如涉及虚函数和动态分配内存的情况。
摘要由CSDN通过智能技术生成

今天开始实战。以Test程序为例来看看如何发现memory leak。首先是以libumem方式运行程序:

//Test.cpp
int *p = (int*)malloc(50);
p = (int*)malloc(100);
free(p);

-bash-3.00$ UMEM_DEBUG=default UMEM_LOGGING=transaction LD_PRELOAD=libumem.so.1 ./Test &

-bash-3.00$ ps -ef | grep Test
jianxu1  6105   6093   0 05:08:28 pts/2       0:00 ./Test

接下来有两种方式,一是通过gcore,然后使用mdb打开core文件:
-bash-3.00$ gcore 6105
gcore: core.6105 dumped

-bash-3.00$ mdb core.6105
Loading modules: [ libumem.so.1 libc.so.1 ld.so.1 ]
>

或者直接attach到进程:
-bash-3.00$ mdb -p 6105
Loading modules: [ ld.so.1 libumem.so.1 libc.so.1 ]
>

然后要做的非常简单,使用 ::findleaks命令找出所有的memmory leaks:

> ::findleaks
CACHE     LEAKED   BUFCTL   CALLER
0808fa90       1     0809e080 main+0×26
———————————————————————-
   Total       1 buffer, 64 bytes

> 0809e080$<bufctl_audit
            ADDR          BUFADDR      TIMESTAMP          THREAD
                             CACHE          LASTLOG             CONTENTS
         809e080          809cf80    d0248569f38f5                1
                              808fa90          806f000                   0
                 libumem.so.1`umem_cache_alloc_debug+0x16c
                 libumem.so.1`umem_cache_alloc+0x15c
                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值