1. AddressSanitizer+cmake(Linux)

编译指令:
CXXFLAGS通常需要加上

-fsanitize=address
-fno-omit-frame-pointer     #打印函数调用路径
-fsanitize-recover=address  #AddressSanitizer遇到错误时能够继续
-fsanitize=address-fno-omit-frame-pointer-fsanitize-recover=address### 2. 运行时动态链接
设置环境变量,如设置AddressSanitizer遇到错误时继续运行export ASAN_OPTIONS="halt_on_error=0:abort_on_error=0"

链接ASAN库

LD_PRELOAD=xxxxx/libasan.so ./out
sun@sun:~/nolo/asan_test$ g++ asan_test.cpp -o main -fsanitize=leak
sun@sun:~/nolo/asan_test$ ls
asan_test.cpp  main
sun@sun:~/nolo/asan_test$ ./main =================================================================
==184528==ERROR: LeakSanitizer: detected memory leaksDirect leak of 40 byte(s) in 1 object(s) allocated from:#0 0x7fa1c10cc501 in operator new[](unsigned long) ../../../../src/libsanitizer/lsan/lsan_interceptors.cpp:231#1 0x5595b681319e in main (/home/sun/nolo/asan_test/main+0x119e)#2 0x7fa1c0ba50b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)SUMMARY: LeakSanitizer: 40 byte(s) leaked in 1 allocation(s).
sun@sun:~/nolo/asan_test$ cat asan_test.cpp
#include <iostream>int main()
{int* p = new int[10];
p = NULL;
return 0;
}

3. 安装

AddressSanitizer(地址杀菌剂,简称 ASan) 是谷歌出品的内存检查工具,比 Valgrind 更高效。其由两部组成:编译器 instrumentation 模块
提供malloc()/free()替代项的运行时库
gcc 4.8 开始,AddressSanitizer 成为 gcc 的一部分,但不支持符号信息,无法显示出问题的函数和行数。从 4.9 开始,gcc 支持 AddressSanitizer 的所有功能。Ubuntu 一般不用安装,CentOS 一般需要安装。如果使用 AddressSanitizer 时报错:/usr/bin/ld: cannot find /usr/lib64/libasan.so.0.0.0
则需要先安装。Ubuntu 安装命令:sudo apt-get install libasan0
CentOS 安装命令:sudo yum install libasan
使用
在用 gcc 编译程序时,指定 -fsanitize=address 选项即可自动调用 AddressSanitizer。运行程序时,就可以看到相关信息。通过 -g 选项,可以看到报错的函数和行号。

3. 参考

博客园:https://www.cnblogs.com/kika/p/10851494.html
Github 地址:https://github.com/google/sanitizers
Wiki 地址:https://github.com/google/sanitizers/wiki/AddressSanitizer
基本使用:https://blog.csdn.net/c_lazy/article/details/80009627
输出信息的详细解释:https://www.jianshu.com/p/3a2df9b7c353

AddressSanitizer+cmake相关推荐

  1. valgrind 内存泄漏_应用 AddressSanitizer 发现程序内存错误

    应用 AddressSanitizer 发现程序内存错误 作为 C/ C++ 工程师,在开发过程中会遇到各类问题,最常见便是内存使用问题,比如,越界,泄漏.过去常用的工具是 Valgrind,但使用 ...

  2. AddressSanitizer 页面

    介绍 AddressSanitizer 是一个快速的内存错误检测工具,它由一个编译时插桩模块和一个运行库组成.该工具可以检测以下类型的错误: OOB(包括堆.栈和全局变量) UAF Use-After ...

  3. 使用Clang作为编译器 —— AddressSanitizer

    AddressSanitizer(未完成) 1. 介绍 2. 如何构建 3. 使用(Usage) 4. 用符号表现报告(Symbolizing the Reports) 5. 额外的检查(Additi ...

  4. 应用 AddressSanitizer 发现程序内存错误

    应用 AddressSanitizer 发现程序内存错误 作为 C/ C++ 工程师,在开发过程中会遇到各类问题,最常见便是内存使用问题,比如,越界,泄漏.过去常用的工具是 Valgrind,但使用 ...

  5. AddressSanitizer原理解析

    AddressSanitizer: A Fast Address Sanity Checker GitHub官方仓库 AddressSanitizer论文地址 cmake set (CMAKE_CXX ...

  6. TVM cmake示例展示

    TVM cmake示例展示 本文展示tvm/cmake中config.cmake,tvm/cmake/module/LLVM.cmake,tvm/cmake/module/CUDA.cmake,tvm ...

  7. VScode配置CMAKE文件

    创建一个vscode文件 记得一定要创建一个build文件夹,因为cmake编译过程中产生的中间文件会放到build文件夹中. 打开VScode 配置文件 launch.json {"ver ...

  8. PCL1.9的PCLConfig.cmake文件找不到eigen等外部依赖

    PCL1.9的PCLConfig.cmake文件找不到eigen等外部依赖 由于需要用到PCL中on_nurbs模块做拟合,但是ros自带的pcl中没有该模块.所以源码安装了PCL 1.9,但是在使用 ...

  9. ++项目 cmake头文件路径_CMAKE入门实战

    0.导语 最近做的项目使用CLION构建,而这个采用CMakeLists.txt管理,因此为了更好的学习,故找到了一篇大牛级别的入门文章,有文章有代码,本文是花了一点时间把这篇文章学习后的重要点记录吧 ...

最新文章

  1. leangoo怎么导入导出,归档和删除看板?
  2. go 1.4支持Android的说明(译文)
  3. 语音识别——基于深度学习的中文语音识别tutorial(代码实践)
  4. 工作159:根据id传向把对象里面的整个数据传向下个接口
  5. Install Python3.6 on Amazon Linux/EC2 在Amazon Linux实例中安装使用Python3.6
  6. EF – 8.多对多关联
  7. PHP 数组拼接成字符串
  8. 嵌入式系统设计师教程笔记
  9. java基本的商品管理系统
  10. 量子保密通信技术基本原理
  11. 反函数的概念及函数性质
  12. python棋类项目规划一——五子棋游戏策划书——项目一
  13. php 电子图册制作,想把自己的照片做成电子相册 相册制作软件
  14. بۇر بىر سىناق
  15. 路由器的flash和内存
  16. Origin中画折线图实现双X轴和双Y轴(双坐标轴)
  17. 年薪百万的阿里 P7 到底该具备什么样的能力?!解密篇
  18. 等保合规2022系列 | 一个中心+三重防护,助力企业等级保护建设更科学
  19. (三)兴趣对于工作的重要性
  20. QQ2005 SP5貌似不错

热门文章

  1. c语言中求一个数的因数,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
  2. mysql多字段数据统计_超详细的mysql元数据sql统计--information_schema
  3. vsftp pam mysql_VSFTP+MySQL+PAM
  4. c语言 真假条件跳转语句,什么是无条件跳转语句(C++)
  5. 成员变量和成员函数分开存储
  6. 习题8_6与习题9_2
  7. C语言中(字符串)输入scanf()、gets()、fgets()以及getchar()、getc()函数的联系与区别
  8. MySQL面试题 | 附答案解析(十五)
  9. r - 求平均成绩_EXCEL计算修剪平均和条件平均,其实很简单
  10. 【论文速读】基于图像的伪激光雷达三维目标检测