android支持如下7中CPU架构
目前android支持如下7中CPU架构:
- armeabi 第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢(只支持armeabi)
- armeabi-v7a 第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能(支持 armeabi 和 armeabi-v7a,目前大部分手机都是这个架构)
- arm64-v8a 第8代,64位,包含AArch32、AArch64两个执行状态对应32、64bit(支持 armeabi-v7a、armeabi 和 arm64-v8a)
- x86 intel 32位,一般用于平板(支持 armeabi(性能有所损耗) 和 x86)
- x86_64 intel 64位,一般用于平板(支持 x86 和 x86_64)
- mips 基本没见过(支持 mips)
- mips64 基本没见过(支持 mips 和 mips_64)
单个cpu架构文件夹下包含多个so文件
现在以armeabi-v7a架构下的文件夹为例
如上图所示,该文件夹下的共有6个so文件。
在生成符号表时,需要对这6个so文件都执行执行如下步骤:
- 执行生成符号文件命令:
$ dump_syms libxxx.so > libxxx.so.sym
- 查看libxxx.so.sym文件内容,从头部获取uuid,BB0351B14DDA42A6D36FA6EA358B49D50
$ head -n1 libxxx.so.sym
MODULE Linux arm BB0351B14DDA42A6D36FA6EA358B49D50 libxxx.so
- 以uuid为名创建文件夹(特别注意:文件夹的路径)
$ mkdir -p symbols/libxxx.so/BB0351B14DDA42A6D36FA6EA358B49D50/
$ mv libxxx.so.sym symbols/libxxx.so/BB0351B14DDA42A6D36FA6EA358B49D50/
4.针对每个so文件重复上面步骤,最终所有生成的符号表文件都在symbols文件夹下,切记一定要切记:一定要是symbols这个名称,不然找不到符号表。最终生成符号表的目录结构如下所示:
5.最重要的一点:解析dump文件(切记:最终利用minidump_stackwalk解析dump文件时,符号表指向symbols文件夹即可,无需特定指定某个so文件,便可获取crash的行号信息)
$ ./minidump_stackwalk filename.dmp /symbols > crashed.log