内存泄漏工具asan

内存泄漏工具asan的使用与常见错误
本文介绍了如何使用AddressSanitizer(ASan)工具来检测C/C++程序中的内存泄漏、栈溢出和堆溢出等错误。通过在编译时添加特定选项,可以启用ASan并在运行时报告内存问题。文章提供了示例代码和错误输出,帮助开发者理解和定位内存相关问题。

简介

https://zhuanlan.zhihu.com/p/360135083

使用方式

添加编译选项

 -Lasan -fsanitize=address -fsanitize-recover=address -fno-omit-frame-pointer

编写代码文件,如添加test_asan.c

#include<stdio.h>
#include<stdlib.h>

int main(){
   
   
//未释放的内存,会产生内存泄漏
    int* arr = (int*)malloc(sizeof(int) * 10);
    return 0;
}

1.gcc添加方式

gcc -g test_asan.c -o t1 -Lasan -fsanitize=address -fsanitize-recover=address -fno-omit-frame-pointer

2.CMakeLists添加方式

cmake_minimum_required(VERSION 2.8)

project(test C)
set(CMAKE_C_STANDARD 99)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Lasan -fsanitize=address -fsanitize-recover=address -fno-omit-frame-pointer")

add_executable(t1 test_asan.c)

ps:一般需要添加-g,否则仅仅会输出错误,找不到对应函数与行号。
重新编译生成可执行文件
查找动态库位置

find /usr -name 'libasan.so'
#/usr里面没有也可以全局查找或自行安装
find / -name 'libasan.so'
#输出位置如下
/usr/local/lib64/libasan.so

添加动态库

export LD_PRELOAD=/usr/local/lib64/libasan.so

执行程序,可以看到内存泄漏问题并定位

./t1
=================================================================
==2154==ERROR: LeakSanitizer: detected memory leak
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值