Linux使用asan排查C/C++内存泄漏

Linux使用asan排查C/C++内存泄漏

如需转载请标明出处:https://blog.csdn.net/itas109
技术交流:129518033

环境:

OS: Ubuntu 20.04 / CentOS 7
编译器: gcc/g++ 9.4.0

1. 使用AScan

ASAN 早先是 LLVM 中的特性,后被加入 gcc4.8,成为 gcc 的一部分,但不支持符 号信息,无法显示出问题的函数和行数。从 4.9 开始,gcc 支持 AddressSanitizer 的 所有功能。

2. 测试代码

main.cpp

int main()
{
	char* s = new char[256];
	return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12)

project(main)

# check memory leak
set(CMAKE_CXX_FLAGS "-g -fsanitize=address")

add_executable( ${PROJECT_NAME} main.cpp)

g++编译

$ g++ -fsanitize=address -g main.cpp -o main

cmake编译

$ cmake -B bin
$ cmake --build bin

测试

$ export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.5

$ ./main

=================================================================
==2499561==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 256 byte(s) in 1 object(s) allocated from:
    #0 0x7fadbeb0f787 in operator new[](unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cc:107
    #1 0x56386698619e in main /root/memoryLeakTest/main.cpp:3
    #2 0x7fadbe4e6082 in __libc_start_main ../csu/libc-start.c:308

SUMMARY: AddressSanitizer: 256 byte(s) leaked in 1 allocation(s).

3. centos7升级gcc支持ascan

centos7默认gcc版本为4.8.5

下载离线安装包

sudo yum update
sudo yum install centos-release-scl
sudo yum install --downloadonly --downloaddir=devtoolset9 devtoolset-9 
sudo yum install --downloadonly --downloaddir=devtoolset9 devtoolset-9-libasan-devel libssan

安装

cd devtoolset9
sudo rpm -ivh devtoolset-9-*

使用

scl enable devtoolset-9 bash

License

License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎

如需转载请标明出处:https://blog.csdn.net/itas109
技术交流:129518033

猜你喜欢

转载自blog.csdn.net/itas109/article/details/130303451