c/c++:CMakeLists.txt中添加编译/连接选项使用内存错误检测工具Address Sanitizer(ASan)

Address Sanitizer(ASan)是一个快速的内存错误检测工具。从gcc 4.8开始,AddressSanitizer成为gcc的一部分。
既然是gcc内置的内存检查工具,用起来比第三方的库更方便些。只要指定相应的编译链接参数就可以实现内存泄露检查了,如下是是cmake脚本中增加Address Sanitizer选项的示例:

# 使用sanitize进行内存泄露检查
# 编译选项
target_compile_options(${target} PRIVATE 
	$<$,$>:-fsanitize=address> 
	)
# 连接选项
target_link_options(${target} PUBLIC $<$,$>:-fsanitize=address -static-libasan>)

上述示例中:
代码的含义是使用cmake generator-expression(生成器表达式)指定只在编译器为gcc,且操作系统为Linux时增加编译选项 -fsanitize=address
同理,也是在编译器为gcc,且操作系统为Linux时增加链接选项 -fsanitize=address -static-libasan

因为gcc下才内置AddressSanitizer,而且Mingw并不是默认支持AddressSanitizer(目前需要额外安装)。

-static-libasan 是静态链接asan库

参考资料

《libasan使用和遇到的问题》

你可能感兴趣的:(c/c++/c++11,cmake,c语言,c++,cmake,sanitizer,内存泄露,gcc)