当前位置: 首页 > article >正文

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 
	$<$<AND:$<CXX_COMPILER_ID:GNU>,$<PLATFORM_ID:Linux>>:-fsanitize=address> 
	)
# 连接选项
target_link_options(${target} PUBLIC $<$<AND:$<CXX_COMPILER_ID:GNU>,$<PLATFORM_ID:Linux>>:-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使用和遇到的问题》


http://www.kler.cn/a/287208.html

相关文章:

  • Django数据库迁移与反向迁移处理方案分析
  • CSS3_动画(九)
  • 算法 二分法查找的利弊
  • Elasticsearch集群拒绝请求:索引磁盘使用超限
  • 大学作业参考:网页设计作业 - 工作计划-Java SQL HTML源码下载
  • 讯飞、阿里云、腾讯云:Android 语音合成服务对比选择
  • 设计模式 11 享元模式
  • 力扣SQL仅数据库(580-608)
  • Wallcraft壁纸大全3.39.0 4K画质精品壁纸解锁VIP
  • PHP智能化排队叫号系统微信小程序源码
  • 如何防范ddos 攻击
  • 项目延期,怎么有效调整计划,追赶进度
  • 基层医疗云HIS系统源码:云计算、大数据等现代信息技术研发
  • 突破编程_C++_设计模式(组合模式)
  • html文本文字中保留空格和换行
  • 聚铭网络亮相“宁创新品”——“新质城建”应用场景发布会
  • LangChain学习资料
  • 【mysql】mysql查询机制 调优不止是索引调优
  • 安装NERDTree
  • 微电网能量管理系统在企业光伏电站的应用
  • RabbitMQ 应用
  • 23种设计模式详解-创建模式篇
  • 不到一元!新手用ToDesk云电脑体验《黑神话:悟空》
  • 基于FPGA的SD卡的数据读写实现(SD NAND FLASH)
  • APP、小程序对接聚合广告平台需要提供哪些资料?
  • (五)Kafka离线安装 - Kafka开机自启