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

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使用和遇到的问题》

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • VM Workstation虚拟机AlmaLinux 9.4操作系统安装(桌面版安装详细教程)(宝塔面板的安装),填补CentOS终止支持维护的空白
  • 开源项目管理工具 Plane 安装和使用教程
  • opencv车道偏离系统-代码+原理-人工智能-自动驾驶
  • 【Next】3. 开发规范
  • 哪个编程工具让你的工作效率翻倍?
  • zhidianyun01/基于 ThinkPHP+Mysql 灵活用工+灵活用工源码+灵活用工平台源码
  • 怎样通过c51实现环境监测设计
  • shell脚本—————局域网IP扫描
  • vscode常用插件及设置
  • 在繁忙工作环境中提升开发效率:JetBrains IntelliJ IDEA 的应用
  • Java异常处理-如何选择异常类型
  • 【软件测试】需求之外的“意外”:如何处理范围外的问题?
  • Hive的存储格式
  • csrf的详解
  • ContentObserver 内容观察者
  • [译]Python中的类属性与实例属性的区别
  • 【Linux系统编程】快速查找errno错误码信息
  • 77. Combinations
  • angular学习第一篇-----环境搭建
  • express.js的介绍及使用
  • Hibernate【inverse和cascade属性】知识要点
  • javascript 哈希表
  • JavaScript设计模式之工厂模式
  • Redis 中的布隆过滤器
  • Spark学习笔记之相关记录
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • uva 10370 Above Average
  • Vim 折腾记
  • Vue2.0 实现互斥
  • vue总结
  • windows下mongoDB的环境配置
  • 给github项目添加CI badge
  • 关于List、List?、ListObject的区别
  • 检测对象或数组
  • 使用API自动生成工具优化前端工作流
  • 我与Jetbrains的这些年
  • 自定义函数
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • # centos7下FFmpeg环境部署记录
  • #pragma pack(1)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (07)Hive——窗口函数详解
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (多级缓存)缓存同步
  • (分布式缓存)Redis持久化
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (十)Flink Table API 和 SQL 基本概念
  • (一)80c52学习之旅-起始篇
  • (转)Sql Server 保留几位小数的两种做法
  • (轉貼) UML中文FAQ (OO) (UML)
  • .chm格式文件如何阅读
  • .gitignore不生效的解决方案
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务