首页 > 代码库 > 学会用Clang来进行内存泄露分析

学会用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

其中的-DCLANG_CHECKS=adress就是打开这项内存泄露的检查开关,然后对项目进行编译,之后编译出来的文件你就可以正常运行,运行程序之后,它会去调用你path下Clang文件夹bin中的llvm-symbolizer进行符号读取,一有内存泄露它就会停止报错。然后传给终端的信息里面详细介绍了在内存的申请是在哪个线程哪个函数开始的,内存的删除是在哪个线程哪个函数进行的,内存最后的读取(即野指针的重复滥用最终导致内存泄露)是在哪个线程哪个函数进行的,这对于多线程的开发自然又是如虎添翼,希望你会和我一样喜欢这款工具。