-
下载源码
https://chromium.googlesource.com/breakpad/breakpad/+/master
-
下载依赖包
https://chromium.googlesource.com/linux-syscall-support/
PS:无该依赖包,会报错
src/client/linux/crash_generation/crash_generation_client.cc:40:10: fatal error: third_party/lss/linux_syscall_support.h: 没有那个文件或目录
下载完后,在
/third_part/
目录下创建lss
文件夹,并将linux_syscall_support.h
拷贝进来。 -
编译
./configure && make
ps:Android studio 的安装
/bin/lldb/bin
目录下也有一个minidump_stackwalk 可以直接使用。 -
使用
- 解析dmp,定位问题位置
./minidump_stackwalk *.dmp > crash.txt
Operating system: Android
0.0.0 Linux 4.9.117+ #34 SMP PREEMPT Wed Apr 14 09:45:19 CST 2021 armv7l
CPU: arm
ARMv7 ARM part(0x4100c070) features: half,thumb,fastmult,vfpv2,edsp,neon,vfpv3,tls,vfpv4,idiva,idivt
4 CPUs
GPU: UNKNOWN
Crash reason: SIGSEGV /SEGV_MAPERR
Crash address: 0x0
Process uptime: not available
Thread 0 (crashed) //问题线程
0 libcrash-lib.so + 0x7b2 //问题位置和寄存器信息
r0 = 0x00000000 r1 = 0x00000001 r2 = 0xbea1e74c r3 = 0xacb13680
r4 = 0xa94750f0 r5 = 0x00000001 r6 = 0x00000000 r7 = 0xbea1e728
r8 = 0x00000000 r9 = 0xacb4e000 r10 = 0xbea1e750 r12 = 0x909d6fd8
fp = 0xacb4e000 sp = 0xbea1e714 lr = 0x909d37cf pc = 0x909d37b2
Found by: given as instruction pointer in context
1 libart.so + 0x41b279
- 符号解析,反解符号
./arm-linux-androideabi-addr2line -f -C -e libcrash-lib.so 0x77e
xxx/xxx/xxx/app/src/main/cpp/crash.cpp:6
//crahs.cpp
#include <jni.h>
#include <stdio.h>
void Crash() {
volatile int *a = (int *) (NULL);
*a = 1;//第6行
}