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相关推荐

  1. 【Linux】内存检测工具Valgrind

    内存检测工具Valgrind Valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,作者是获得过Google-O'Reilly开源大奖的Julian Seward,它包含一个内核 ...

  2. linux下内存性能测试工具STREAM

    Linux下内存性能测试 简介 下载并解压 编译 运行 运行结果 结果分析 简介 Stream测试是内存测试中业界公认的内存带宽性能测试基准工具,stream由Virginia University提 ...

  3. Linux下内存泄露工具

    概述 内存泄露(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的.复杂的应用程序中,这时就出现了内存泄露.尽管优秀的编程实践可以确保最少的泄露,但是根据经验, ...

  4. linux下硬件检测工具,Linux硬件检测工具

    Linux下的硬件检测和识别软件,做得比较完善了.选购Laptop,如果是自带Linux系统,完全可以用它们来检测硬件. 首先出场的当然是: 1. dmidecode  www.nongnu.org/ ...

  5. 【开发工具】【sparse】Linux下代码检测工具(sparse)的使用

    获取更多相关的嵌入式开发工具,可收藏系列博文,持续更新中: [开发工具]嵌入式常用开发工具汇总帖 Linux内核源码里其实包含了相应的代码检测工具[sparse],位置在: Documentation ...

  6. windows下内存检测工具

    1.Intel的Parallel Inspector工具,和vs集成超好, 而且还带了线程检测工具. 2.Purify https://www.cnblogs.com/hehehaha/archive ...

  7. linux下emmc检测工具,eMMC芯片Bug检测工具(eMMC check)下载 v1.3.0

    eMMC芯片Bug检测工具(eMMC check)安卓版可检测你的芯片是否有BUG,其实更大的用处还是看字库的写入时间以此来鉴别是否新机. 最近越来越多的人反映三星I9300莫名其妙的开不了机,开机卡 ...

  8. Linux内核内存检测工具KASAN

    KASAN ['kæzən] KASAN 是 Kernel Address Sanitizer 的缩写,它是一个动态检测内存错误的工具,主要功能是检查内存越界访问和使用已释放的内存等问题.KASAN ...

  9. linux下emmc检测工具,eMMC check(eMMC芯片是否新机检测工具)1.3.0 安卓版

    用EMMc这个软件检测你的手机芯片是否有BUG,其实更大的用处还是看字库的写入时间以此来鉴别是否新机.直接下载就是apk文件安卓手机直接安装. 最近越来越多的人反映三星I9300莫名其妙的开不了机,开 ...

最新文章

  1. 火星上真的有液态水?!欧洲科学家新发现登上《自然·天文学》
  2. HashMap的负载因子为什么默认是0.75
  3. JS 原型链 prototypt 和隐式原型 _proto_
  4. Spring Boot学习笔记-进阶(3)
  5. cc2530i2c可同时接受两个传感器的数据吗_汽车方向及维修_玉树沃尔沃S40方向机,宝马531电子方向机进水可以维修吗...
  6. C/C++:Windows编程—Windows RPC 传递自定义数据类型、自定义数据类型数组、指针数组
  7. 数据时代总结思维导图模板分享及绘制技巧
  8. 挖矿仍然有利可图吗?
  9. 黑客破解 APP 常用工具,低调低调!
  10. 如何判断是否是webservice接口
  11. Largest Rectangle in a Histogram 题解 Python
  12. STM32F103C8T6实现流水灯
  13. 对称矩阵标准化以后不是对称矩阵的原因和解决办法
  14. Maven清除lastUpdated文件
  15. 如何在 XMind 中输入数学方程?LaTeX 简易入门
  16. matplotlib 设置标注方向_原来Matplotlib绘图也可以这么漂亮,这次真的是学习到了...
  17. do{...}while(0)的用法
  18. PTA 1047 编程团体赛(c语言)
  19. linux如何编写.sh脚本,linux sh脚本编写奇刃
  20. send函数给FTP服务器发消息,send函数给FTP服务器发消息

热门文章

  1. [JAVA使用技巧]Java抽取Word和PDF格式文件_网络大本营
  2. 神武手游宠物加点方法及属性参考
  3. Python 解决warining的方法FutureWarning: warnings.warn(CV_WARNING, FutureWarning)
  4. Matlab 公式大全
  5. 【Java】StudentsInfoQuery(简单的学生信息查询系统)
  6. React styled-components TypeScript 的最佳实践
  7. 没有独立显卡没有NVIDIA 如何安装pytorch
  8. c语言窗口插件,C语言插件开发形式
  9. Windows7实现局域网共享上网的方法
  10. Android使用Google SMSRetrieverAPI监听短信