GCC:通过ASAN检查内存泄漏,溢出等问题

C/C++项目最大的一个隐患就是有时会出现内存泄漏,内存溢出等问题。

ASAN是谷歌退出的一个内存检查工具,已经被集成到了gcc_v4.8以上版本中,使用起来也十分的方便,只需在编译和连接中加入编译选项-fsanitize=address即可,同时为了能更加容易的定位到错误发生的位置,建议使用-g选项,此外还可以通过-fno-omit-frame-pointer改善报告的堆栈信息。

以下举例说明ASAN的强大检测功能:

1.检测内存泄漏

//a.cpp
void* a()
{
    return new int;
}

//m.cpp
void* a();

int main()
{
    a();
    return 0;
}

编译每个文件并连接
g++ -fsanitize=address -g -c a.cpp
g++ -fsanitize=address -g -c m.cpp
g++ -fsanitize=address -g -o m a.o m.o

也可以一次性编译
g++ -fsanitize=address -g -o m a.cpp m.cpp

$ ./m
===============================================================

你可能感兴趣的:(C/C++,c++)