android NDK crash定位(精简版)

NDK的crash与java不同,无法看到报错的具体位置,极端情况下甚至只有一句log。如下面这种

Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x76c229b8e8 in tid 23230 (ImageTester:), pid 23186

在网上查了不少文章,有的写的很多,但却不怎么实用,有的则是给出的路径错误,这里简单记载下可用的命令。

除了使用打log那种笨方法,ndk的crash需要用到ndk-stack,位于NDK的安装目录下,比如我自己的ndk-stack位于 D:\Android\sdk\ndk\22.0.7026061,也可以在ndk-bundle目录中找到。

还需要知道的是so文件所在的路径,网上很多文章给出的路径是错误的,在android studio的项目中,正确的路径位于 $PROJECT_PATH\app\build\intermediates\cmake\debug\obj\arm64-v8a (如果是其它CPU架构,可能是armeabi-v7a, x86等)

Android studio切换到Terminal窗口,执行以下命令:

adb logcat | ndk-stack -sym $PROJECT_PATH\app\build\intermediates\cmake\debug\obj\arm64-v8a

然后就可以看到crash相关的log,但这种方法有时候也无法得到正确的信息,原因未知。下面是执行命令后打出的log

********** Crash dump: **********
Build fingerprint: 'Xiaomi/polaris/polaris:10/QKQ1.190828.002/V12.0.2.0.QDGCNXM:user/release-keys'
#00 0x00000000001bd878 /data/app/com.aa.bb-bLyZl4qA6krwTv8tyF3F5Q==/lib/arm64/libnative-lib.so (fcvMemAlloc+56) (BuildId: b88c557d803fa97f9476f567d89d201ae7125d
00)
                                                                                                           fcvMemAlloc
                                                                                                           ??:0:0
#01 0x000000000005e2bc /data/app/com.aa.bb-bLyZl4qA6krwTv8tyF3F5Q==/lib/arm64/libnative-lib.so (Java_com_aa_bb_util_ImageProcessor_getMixPixes+1320)
(BuildId: b88c557d803fa97f9476f567d89d201ae7125d00)
                                                                                                           Java_com_aa_bb_util_ImageProcessor_getMixPixes
                                                                                                           D:/project_list/bb/app/src/main/cpp\native-lib.cpp:169:65

......
......

#14 0x00000000005a1158 /apex/com.android.runtime/lib64/libart.so (MterpInvokeVirtual+1352) (BuildId: 8b52ee5427994d5851b0f85a2c15eedf)
#15 0x0000000000131814 /apex/com.android.runtime/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 8b52ee5427994d5851b0f85a2c15eedf)
Crash dump is completed
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值