Centos7.9上使用ASAN地址消毒器检测SRS内存泄漏

一、升级GCC版本

    由于GCC自4.8始才开始支持ASAN地址消毒器,但支持得不够完善,功能也不完备,笔者一向尽量使用最新版本,故而此文选择了GCC 10.2.0版本。

    建议先至官网 Index of /software/gcc/releases/选择gcc-10.2.0.tar.gz下载。由于不是本文讲述的重点,此处略去GCC编译安装步骤,有兴趣的同学可自行google之。

二、脚本编写

1.增加asan配置选项

1)于srs/auto/options.sh脚本里增加如下代码

     1)于srs/auto/setup_variables.sh脚本里增加如下代码

     其中本文所使用的ASAN_OPTIONS环境变量为:

export ASAN_OPTIONS=halt_on_error=0:quarantine_size_mb=1024:thread_local_quarantine_size_kb=512:log_path=/mnt/asan.log:alloc_dealloc_mismatch=1:new_delete_type_mismatch=1:detect_stack_use_after_return=1:check_initialization_order=1:handle_segv=1:report_globals=1:sleep_before_dying=5:print_stats=0:strict_init_order=1:detect_invalid_pointer_pairs=2:suppressions=$SUPP_FILE:detect_container_overflow=1:detect_odr_violation=2:verbosity=0:detect_deadlocks=1:color=always:allocator_may_return_null=1:detect_leaks=1:dump_instruction_bytes=1

2) 打开ASAN地址消毒器开关

在CXXFLAGS里打开ASAN地址消毒器开关:-fsanitize=address -fsanitize-recover=address -fno-omit-frame-pointer。最后静态链接libasan.a库配置编译即可。

 -fsanitize=address:asan地址消毒器开关;

-fsanitize-recover=address:结合ASAN_OPTIONS环境变量中halt_on_error=0使用,可使得ASAN在检测到内存问题后程序可继续运行,而不崩溃或闪退。

三、编译运行

1)执行configure文件

    进入到srs代码根目录,执行source configure --with-asan命令

2)编译

    等待configure文件执行完毕后,执行make -j4编译,可以看到已经成功链接了libasan.a静态库,如下图所示:

四、分析检测结果

    如上文所示,ASAN_OPTIONS环境变量里配置了log_path=/mnt/asan.log,程序运行过程中如果被ASAN检测到内存问题,变会dump到该文件里,文件命名规则为asan.log.pid,如图:

 可以看到ASAN有检测到内存泄漏,接下来就是对比着代码进行分析确认。

  ASAN于GCC10.2.0版本上小试牛刀,大功告成!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值