AddressSanitizer+cmake
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相关推荐
- valgrind 内存泄漏_应用 AddressSanitizer 发现程序内存错误
应用 AddressSanitizer 发现程序内存错误 作为 C/ C++ 工程师,在开发过程中会遇到各类问题,最常见便是内存使用问题,比如,越界,泄漏.过去常用的工具是 Valgrind,但使用 ...
- AddressSanitizer 页面
介绍 AddressSanitizer 是一个快速的内存错误检测工具,它由一个编译时插桩模块和一个运行库组成.该工具可以检测以下类型的错误: OOB(包括堆.栈和全局变量) UAF Use-After ...
- 使用Clang作为编译器 —— AddressSanitizer
AddressSanitizer(未完成) 1. 介绍 2. 如何构建 3. 使用(Usage) 4. 用符号表现报告(Symbolizing the Reports) 5. 额外的检查(Additi ...
- 应用 AddressSanitizer 发现程序内存错误
应用 AddressSanitizer 发现程序内存错误 作为 C/ C++ 工程师,在开发过程中会遇到各类问题,最常见便是内存使用问题,比如,越界,泄漏.过去常用的工具是 Valgrind,但使用 ...
- AddressSanitizer原理解析
AddressSanitizer: A Fast Address Sanity Checker GitHub官方仓库 AddressSanitizer论文地址 cmake set (CMAKE_CXX ...
- TVM cmake示例展示
TVM cmake示例展示 本文展示tvm/cmake中config.cmake,tvm/cmake/module/LLVM.cmake,tvm/cmake/module/CUDA.cmake,tvm ...
- VScode配置CMAKE文件
创建一个vscode文件 记得一定要创建一个build文件夹,因为cmake编译过程中产生的中间文件会放到build文件夹中. 打开VScode 配置文件 launch.json {"ver ...
- PCL1.9的PCLConfig.cmake文件找不到eigen等外部依赖
PCL1.9的PCLConfig.cmake文件找不到eigen等外部依赖 由于需要用到PCL中on_nurbs模块做拟合,但是ros自带的pcl中没有该模块.所以源码安装了PCL 1.9,但是在使用 ...
- ++项目 cmake头文件路径_CMAKE入门实战
0.导语 最近做的项目使用CLION构建,而这个采用CMakeLists.txt管理,因此为了更好的学习,故找到了一篇大牛级别的入门文章,有文章有代码,本文是花了一点时间把这篇文章学习后的重要点记录吧 ...
最新文章
- leangoo怎么导入导出,归档和删除看板?
- go 1.4支持Android的说明(译文)
- 语音识别——基于深度学习的中文语音识别tutorial(代码实践)
- 工作159:根据id传向把对象里面的整个数据传向下个接口
- Install Python3.6 on Amazon Linux/EC2 在Amazon Linux实例中安装使用Python3.6
- EF – 8.多对多关联
- PHP 数组拼接成字符串
- 嵌入式系统设计师教程笔记
- java基本的商品管理系统
- 量子保密通信技术基本原理
- 反函数的概念及函数性质
- python棋类项目规划一——五子棋游戏策划书——项目一
- php 电子图册制作,想把自己的照片做成电子相册 相册制作软件
- بۇر بىر سىناق
- 路由器的flash和内存
- Origin中画折线图实现双X轴和双Y轴(双坐标轴)
- 年薪百万的阿里 P7 到底该具备什么样的能力?!解密篇
- 等保合规2022系列 | 一个中心+三重防护,助力企业等级保护建设更科学
- (三)兴趣对于工作的重要性
- QQ2005 SP5貌似不错
热门文章
- c语言中求一个数的因数,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
- mysql多字段数据统计_超详细的mysql元数据sql统计--information_schema
- vsftp pam mysql_VSFTP+MySQL+PAM
- c语言 真假条件跳转语句,什么是无条件跳转语句(C++)
- 成员变量和成员函数分开存储
- 习题8_6与习题9_2
- C语言中(字符串)输入scanf()、gets()、fgets()以及getchar()、getc()函数的联系与区别
- MySQL面试题 | 附答案解析(十五)
- r - 求平均成绩_EXCEL计算修剪平均和条件平均,其实很简单
- 【论文速读】基于图像的伪激光雷达三维目标检测