Signal含义介绍:https://www.mkssoftware.com/docs/man5/siginfo_t.5.asp
Native崩溃堆栈解读
进程信息:pid表示进程号,tid表示线程号,name表示进程名
错误信号:signal 11表示信号的数字,SIGSEGV表示信号的名字,code 1(SEGV_MAPERR)表示出错代码,fault addr 00000000 表示出错的地址。
寄存器快照:进程收到错误信号时保存下来的寄存器快照,一共有15个寄存器。
堆栈信息:##00表示栈顶,##01调用#00,以此往下都是嵌套的调用关系,直至到栈顶。
#00 pc 00000730 表示出错的地址,后面是库名称,接着后面可以看到函数函数名。
参考:Android Crash之Native Crash分析
分析Native崩溃日志的方法
1. ndk-stack命令
这命令行工具包含在NDK工具的安装目录,和ndk-build和其他一些常用的NDK命令放在一起。
命令:ndk-stack -sym <对应的abi目录> –dump <崩溃日志文件>
注意:要拿对应的abi目录,崩溃信息有abi的(ABI: ‘arm64’)
ndk-stack之后,会有具体报错位置
例如:ndk-stack -sym …/app/build/intermediates/cmake/release/obj/arm64-v8a -dump crash.txt
崩溃信息:
2021-09-07 15:09:44.010 18583-18583/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2021-09-07 15:09:44.010 18583-18583/? A/DEBUG: Build fingerprint: 'google/coral/coral:10/QQ3A.200805.001/6578210:user/release-keys'
2021-09-07 15:09:44.010 18583-18583/? A/DEBUG: Revision: '0'
2021-09-07 15:09:44.010 18583-18583/? A/DEBUG: ABI: 'arm64'
2021-09-07 15:09:44.010 18583-18583/? A/DEBUG: Timestamp: 2021-09-07 15