Linux 调试辅助工具之 addresssanitizer 内存分析工具

使用AddressSanitizer做内存分析
新建文件mem_leak.cpp,键入代码:

#include <iostream>

int main()
{
int* p = new int[10];
p = NULL;
return 0;
}

编译时加上-fsanitizer=leak选项,并执行:

$ g++ mem.leak.cpp -o main -fsanitize=leak
$ ./main
./main: error while loading shared libraries: liblsan.so.0: cannot open shared object file: No such file or directory

发现报错,找不到liblsan.so。
全局查找liblsan.so:

$ sudo find / -name liblsan.so.0
/usr/local/lib/liblsan.so.0
/usr/local/lib64/liblsan.so.0
/usr/lib/liblsan.so.0
/root/open_source/gcc-build-5.1.0/x86_64-unknown-linux-gnu/libsanitizer/lsan/.libs/liblsan.so.0

发现其实是能找到的,只是不在系统默认目录下,这个时候可以采用如下方法:

$ su
Password:
# sudo echo "/user/local/lib64" >> /etc/ld.so.conf
# ldconfig

将 “/user/local/lib64” 追加到 /etc/ld.so.conf 后,echo命令需要root权限,也可以用 sudo vim,直接在 /etc/ld.so.conf 后面添加。
此时再执行之前编译好的可执行文件,即可查看结果

$ ./main

=================================================================
==20779==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 40 byte(s) in 1 object(s) allocated from:
#0 0x7f3deb1ac816 in operator new[](unsigned long) ../../../../gcc-5.1.0/libsanitizer/lsan/lsan_interceptors.cc:154
#1 0x4007f7 in main (/home/minglee/workspace/test_code/mem_leak/main+0x4007f7)
#2 0x7f3dea56bc04 in __libc_start_main (/lib64/libc.so.6+0x21c04)

SUMMARY: LeakSanitizer: 40 byte(s) leaked in 1 allocation(s).
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值