学会用Clang来进行内存泄露分析
近期项目出现了内存泄露的问题,对于PC x86平台来说。一点点的内存泄露往往不会出错,非常难进行debug调试。这个时候我们能够用到苹果给我们带来的神器--Clang编译器来进行内存泄露分析检測。开关打开之后,生成出来的二进制文件对内存泄露的敏感程度非常高。仅仅要有内存泄露基本就会立刻停止并进行报错。
因为项目是用CMake进行组织,因此使用CMake的方法来进行开关的打开,首先要让CC和CXX都变成Clang和Clang++(注意:在Clang下有时候会对inline函数报错,须要将inline去掉)。在build文件夹中输入
CC="clang" CXX="clang++" cmake ../ -Dfsanitize=address -DCMAKE_BUILD_TYPE=Debug
当中的-Dfsanitize=adress就是打开这项内存泄露的检查开关。然后对项目进行编译。之后编译出来的文件你就能够正常执行,执行程序之后。它会去调用你path下Clang目录bin中的llvm-symbolizer进行符号读取,一有内存泄露它就会停止报错。然后传给终端的信息里面具体介绍了在内存的申请是在哪个线程哪个函数開始的,内存的删除是在哪个线程哪个函数进行的。内存最后的读取(即野指针的反复滥用终于导致内存泄露)是在哪个线程哪个函数进行的,这对于多线程的开发自然又是如虎添翼。希望你会和我一样喜欢这款工具。