AndroidStudio如何使用Address Sanitizer(ASan)检测内存错误

github-samplecode:https://github.com/MitnickG/Android.git
Google原文:https://developer.android.com/ndk/guides/asan#cmake

当使用VisualStudio编译cpp代码时,有一键选择编出ASan版本从而检测内存错误的功能。

但AndroidStudio用到NDK时,从API27开始才支持ASan检测。

在AS中使用ASan需要注意的是,ASan的CPU开销约为2倍,代码大小开销在50%到2倍之间,并且内存开销很大,约为2倍。
官方建议对于64位ARM(一般现在的设备都是这个了),建议使用HWAddress Sanitizer

但本文还是记录下,使用ASan的几个坑。

先写使用流程:

  • 需要准备的文件有:

1、wrap.sh(自己写一个,内容如下):(log_to_syslog=false原文没有介绍,之后可以改成true试试看会有什么不同)

#!/system/bin/sh
HERE="$(cd "$(dirname "$0")" && pwd)"
export ASAN_OPTIONS=log_to_syslog=false,allow_user_segv_handler=1
ASAN_LIB=$(ls $HERE/libclang_rt.asan-*-android.so)
if [ -f "$HERE/libc++_shared.so" ]; then
    # Workaround for https://github.com/android-ndk/ndk/issues/988.
    export LD_PRELOAD="$ASAN_LIB $HERE/libc++_shared.so"
else
    export LD_PRELOAD="$ASAN_LIB"
fi
"$@"

2、libclang_rt.asan*.so(有4种,可根据需要只取其中几种),该so可以从ndk中找到,如

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值