首页 > 编程知识 正文

linux查看内存品牌,内存性能测试软件

时间:2023-05-06 03:19:33 阅读:164622 作者:3438

33558 www.Sina.com/asan (address-sanitizier )以前是LLVM的特性,但加入了GCC 4.8,并在GCC 4.9后加入了对ARM平台的支持。 因此,如果使用GCC 4.8或更高版本的ASAN,则不需要安装第三方库,并且可以通过在编译时指定CFLAGS编译来打开交换机。

Linux下内存检测工具:asan

Linux下的内存发现工具: asan

1、编译选项

1.1 Gcc编译选项

1.2 Ld链路选项

2、东盟运行选项

2.1设置asan _ options

2.2 LSAN_OPTIONS设置

3、总结

1、编译选项1.1 Gcc编译选项# -fsanitize=address :打开内存越界检测

# -fsanitize-recover=address :典型守护进程为了确保稳定性,在发生错误时会继续运行,而不是简单地退出。 要在使用此选项支持内存错误后继续运行程序,必须重叠设置ASAN_OPTIONS=halt_on_error=0。 如果未设置此选项,内存错误将作为错误退出

目录

# -fno-stack-protector :启用堆栈溢出保护

# -fno-omit-frame-pointer :启用堆栈溢出保护

# -fno-var-tracking :缺省选项为-fvar-tracking,其运行速度非常慢

# -g1 :指示最小调试信息,通常调试版本使用-g即-g2

ASAN_CFLAGS +=-fsanitize=address -fsanitize-recover=address

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 :掩码打印中的某些内存错误

ASAN_CFLAGS += -fno-stack-protector -fno-omit-frame-pointer -fno-var-tracking -g1

除了上面列出的常规选项外,还有一些选项可以根据实际需要添加。

# detect _ stack _ use _ after _ return=1:检查对释放的堆栈区域的访问

# handle_segv=1:处理段错误; 也可以添加handle_SIGILL=1来处理sigill信号

# quarantine_size=10240000:内存可缓存free内存大小10M

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

2.2 LSAN_OPTIONS设置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,常见操作选项如下:

# exitcode=0:将内存泄漏结束代码设置为0,默认为内存泄漏结束代码0x16

# use_unaligned=4:4字节对齐

LSAN_OPTIONS是LeakSanitizier运行选项的环境变量,而LeakSanitizier是ASAN的内存泄漏检测模块

3、总结实际开发环境,gcc版本较低,使用asan进行内存检查时,可能需要链接libasan.so库。 您可以使用yum downloader-- resolve-- destdir=.libasan下载相应的gcc版本的rpm安装软件包。

其次,平台软件通常在内部实现一组内存操作接口,要使用asan工具,必须将其替换为glibc提供的接口。 在这种情况下,LD_PRELOAD环境变量可以解决这些问题。

export LSAN_OPTIONS=exitcode=0:use_unaligned=4

PS:

1、安装LLVM 3.1或更高版本

2、附加编译参数

-fsanitize=address 3,设置环境变量参数

export LD_PRELOAD= libasan.so.2:libprelib.so#vos_malloc -- malloc

export ASAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-symbolizer

4、运行程序,发生错误时,addressSanitizer会给出详细报告。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。