使用 arm-linux-androideabi-addr2line 工具定位 libunity.so 崩溃问题

arm-linux-androideabi-addr2line 说明:

arm-linux-androideabi-addr2line 是 NDK 自带的调试工具,可以用来分析 so 崩溃时输出的的内存地址。

使用方式:

首先定位工具的路径,并通过 cmd 进入到 arm-linux-androideabi-addr2line 所在的文件夹内,如果是对 Android 开发没有一点经验和概念的小白,比如我,在寻找这个文件的时候就发现自己安了好几个版本的 ndk,不要着急,随便找一个就可以。之后在搜索栏直接搜索这个工具名。
在这里插入图片描述
这里我进入的是 ndk-r13b 这个文件夹进行的搜索
在这里插入图片描述
之后就是通过 cmd 进入到这个路径

在这里插入图片描述
执行命令:
arm-linux-androideabi-addr2line -C -f -e so库文件的路径 具体的内存地址
比如我需要分析的 crash 信息如下:

Caused by: java.lang.Error: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000004
Build fingerprint: 'xxxxx 测试信息'
Revision: '0'
pid: 21666, tid: 21847, name: UnityMain  >>> xxx 游戏包名 <<<
    r0 980ae958  r1 00000004  r2 00430000  r3 b11dc6dd
    r4 980ae958  r5 980ae958  r6 ffffffff  r7 980afe78
    r8 00000000  r9 a4b2ce00  sl 00000001  fp 980ae948
    ip 002e3688  sp 980ae938  lr 9738a941  pc 978460f8  cpsr 86371100

	at libunity.006ee0f8(Native Method)
	at libunity.0023293d(Native Method)
	at Unknown.fffffffd(Unknown Source:0)

这里显示了 libunity.006ee0f8libunity.0023293d 两个问题,所以 so 库文件就是要使用 libunity.so。为了简便起见,我将这个文件复制到了 F 盘下。

需要执行的命令和结果如下所示:
在这里插入图片描述
可以看出是在调用 UnitySendMessage 方法后调用了 JNI_OnUnload 方法,然后就 crash 了。

猜你喜欢

转载自blog.csdn.net/EverNess010/article/details/107612346