Linux系统上的Breakpad编译和使用

  1. 下载源码

    https://chromium.googlesource.com/breakpad/breakpad/+/master

  2. 下载依赖包

    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拷贝进来。

  3. 编译

    ./configure && make
    

    ps:Android studio 的安装/bin/lldb/bin目录下也有一个minidump_stackwalk 可以直接使用。

  4. 使用

  • 解析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行
}
  1. 参考一参考二
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值