内存泄漏是程序中常见,也是最令人痛苦的一种bug。好在有一些检查工具可以帮助我们,这里介绍一个google 提供的简单直接的工具 Address-Sanitizer (ASAN)。
预备条件
ASAN 原来是LLVM 中的特性,后来GCC 4.8中也开始支持。也就是说,如果采用 gcc 或者 clang编译的话,都是可以直接使用,无需额外安装的。
使用
只需要在 可以在CMakeLists.txt 中添加 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-point -static-libsan")
,然后编译就好了。
或者 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan")
也可以直接用
gcc -fsanitize=address -fno-omit-frame-point -static-libsan test.cpp -o test
不过这个是在 Linux 中。在windows中最后链接的动态库应该是 -static-libasan
。