Linux下内存检测工具:asan
Linux下内存检测工具:asan
ASAN(Address-Sanitizier)早先是LLVM中的特性,后被加入GCC 4.8,在GCC 4.9后加入对ARM平台的支持。因此GCC 4.8以上版本使用ASAN时不需要安装第三方库,通过在编译时指定编译CFLAGS即可打开开关。
目录
Linux下内存检测工具:asan
1、编译选项
1.1 Gcc编译选项
1.2 Ld链接选项
2、ASAN运行选项
2.1 ASAN_OPTIONS设置
2.2 LSAN_OPTIONS设置
3、总结
1、编译选项
1.1 Gcc编译选项
# -fsanitize=address:开启内存越界检测
# -fsanitize-recover=address:一般后台程序为保证稳定性,不能遇到错误就简单退出,而是继续运行,采用该选项支持内存出错之后程序继续运行,需要叠加设置ASAN_OPTIONS=halt_on_error=0才会生效;若未设置此选项,则内存出错即报错退出
ASAN_CFLAGS += -fsanitize=address -fsanitize-recover=address
# -fno-stack-protector:去使能栈溢出保护
# -fno-omit-frame-pointer:去使能栈溢出保护
# -fno-var-tracking:默认选项为-fvar-tracking,会导致运行非常慢
# -g1:表示最小调试信息,通常debug版本用-g即-g2
ASAN_CFLAGS += -fno-stack-protector -fno-omit-frame-pointer -fno-var-tracking -g1
1.2 Ld链接选项
ASAN_LDFLAGS += -fsanitize=address -g2
如果使用gcc链接,此处可忽略。
2、ASAN运行选项
2.1 ASAN_OPTIONS设置
ASAN_OPTIONS是Address-Sanitizier的运行选项环境变量。
# halt_on_error=0:检测内存错误后继续运行
# detect_leaks=1:使能内存泄露检测
# malloc_context_size=30:内存错误发生时,显示的调用栈层数为30
# log_path=/root/asan.log:内存检查问题日志存放文件路径
# suppressions=$EXCLUDED_FILE:屏蔽打印某些内存错误
export ASAN_OPTIONS=halt_on_error=0:use_sigaltstack=0:detect_leaks=1:malloc_context_size=15:log_path=/root/asan.log:suppressions=$EXCLUDED_FILE
除了上述常用选项,以下还有一些选项可根据实际需要添加:
# detect_stack_use_after_return=1:检查访问指向已被释放的栈空间
# handle_segv=1:处理段错误;也可以添加handle_sigill=1处理SIGILL信号
# quarantine_size=10240000:内存cache可缓存free内存大小10M
ASAN_OPTIONS=${ASAN_OPTIONS}:verbosity=0:handle_segv=1:allow_user_segv_handler=1:detect_stack_use_after_return=1:fast_unwind_on_fatal=1:fast_unwind_on_check=1:fast_unwind_on_malloc=1:quarantine_size=10240000
2.2 LSAN_OPTIONS设置
LSAN_OPTIONS是LeakSanitizier运行选项的环境变量,而LeakSanitizier是ASAN的内存泄漏检测模块,常用运行选项有:
# exitcode=0:设置内存泄露退出码为0,默认情况内存泄露退出码0x16
# use_unaligned=4:4字节对齐
export LSAN_OPTIONS=exitcode=0:use_unaligned=4
3、总结
实际开发环境中,可能存在gcc版本低,使用asan做内存检查时,需要链接libasan.so库的情况,可以使用yumdownloader --resolve --destdir=. libasan 下载对应gcc版本rpm安装包。
其次,平台软件通常都会内部实现一套内存操作接口,为使用asan工具,需要替换成glibc提供的接口。此时,可以通过LD_PRELOAD环境变量解决这类问题。
export LD_PRELOAD= libasan.so.2:libprelib.so #vos_malloc --> malloc
PS:
1、安装LLVM 3.1以上版本
2、编译参数附加
-fsanitize=address
3、设置环境变量参数
export ASAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-symbolizer
export ASAN_OPTIONS=symbolize=1
4、运行程序,如果出错,addressSanitizer会给出详细的报告。
Linux下内存检测工具:asan相关推荐
- 【Linux】内存检测工具Valgrind
内存检测工具Valgrind Valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,作者是获得过Google-O'Reilly开源大奖的Julian Seward,它包含一个内核 ...
- linux下内存性能测试工具STREAM
Linux下内存性能测试 简介 下载并解压 编译 运行 运行结果 结果分析 简介 Stream测试是内存测试中业界公认的内存带宽性能测试基准工具,stream由Virginia University提 ...
- Linux下内存泄露工具
概述 内存泄露(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的.复杂的应用程序中,这时就出现了内存泄露.尽管优秀的编程实践可以确保最少的泄露,但是根据经验, ...
- linux下硬件检测工具,Linux硬件检测工具
Linux下的硬件检测和识别软件,做得比较完善了.选购Laptop,如果是自带Linux系统,完全可以用它们来检测硬件. 首先出场的当然是: 1. dmidecode www.nongnu.org/ ...
- 【开发工具】【sparse】Linux下代码检测工具(sparse)的使用
获取更多相关的嵌入式开发工具,可收藏系列博文,持续更新中: [开发工具]嵌入式常用开发工具汇总帖 Linux内核源码里其实包含了相应的代码检测工具[sparse],位置在: Documentation ...
- windows下内存检测工具
1.Intel的Parallel Inspector工具,和vs集成超好, 而且还带了线程检测工具. 2.Purify https://www.cnblogs.com/hehehaha/archive ...
- linux下emmc检测工具,eMMC芯片Bug检测工具(eMMC check)下载 v1.3.0
eMMC芯片Bug检测工具(eMMC check)安卓版可检测你的芯片是否有BUG,其实更大的用处还是看字库的写入时间以此来鉴别是否新机. 最近越来越多的人反映三星I9300莫名其妙的开不了机,开机卡 ...
- Linux内核内存检测工具KASAN
KASAN ['kæzən] KASAN 是 Kernel Address Sanitizer 的缩写,它是一个动态检测内存错误的工具,主要功能是检查内存越界访问和使用已释放的内存等问题.KASAN ...
- linux下emmc检测工具,eMMC check(eMMC芯片是否新机检测工具)1.3.0 安卓版
用EMMc这个软件检测你的手机芯片是否有BUG,其实更大的用处还是看字库的写入时间以此来鉴别是否新机.直接下载就是apk文件安卓手机直接安装. 最近越来越多的人反映三星I9300莫名其妙的开不了机,开 ...
最新文章
- 火星上真的有液态水?!欧洲科学家新发现登上《自然·天文学》
- HashMap的负载因子为什么默认是0.75
- JS 原型链 prototypt 和隐式原型 _proto_
- Spring Boot学习笔记-进阶(3)
- cc2530i2c可同时接受两个传感器的数据吗_汽车方向及维修_玉树沃尔沃S40方向机,宝马531电子方向机进水可以维修吗...
- C/C++:Windows编程—Windows RPC 传递自定义数据类型、自定义数据类型数组、指针数组
- 数据时代总结思维导图模板分享及绘制技巧
- 挖矿仍然有利可图吗?
- 黑客破解 APP 常用工具,低调低调!
- 如何判断是否是webservice接口
- Largest Rectangle in a Histogram 题解 Python
- STM32F103C8T6实现流水灯
- 对称矩阵标准化以后不是对称矩阵的原因和解决办法
- Maven清除lastUpdated文件
- 如何在 XMind 中输入数学方程?LaTeX 简易入门
- matplotlib 设置标注方向_原来Matplotlib绘图也可以这么漂亮,这次真的是学习到了...
- do{...}while(0)的用法
- PTA 1047 编程团体赛(c语言)
- linux如何编写.sh脚本,linux sh脚本编写奇刃
- send函数给FTP服务器发消息,send函数给FTP服务器发消息
热门文章
- [JAVA使用技巧]Java抽取Word和PDF格式文件_网络大本营
- 神武手游宠物加点方法及属性参考
- Python 解决warining的方法FutureWarning: warnings.warn(CV_WARNING, FutureWarning)
- Matlab 公式大全
- 【Java】StudentsInfoQuery(简单的学生信息查询系统)
- React styled-components TypeScript 的最佳实践
- 没有独立显卡没有NVIDIA 如何安装pytorch
- c语言窗口插件,C语言插件开发形式
- Windows7实现局域网共享上网的方法
- Android使用Google SMSRetrieverAPI监听短信