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