Android dump .so 文件crash log

本文介绍了一种简化的方法来解析Android应用崩溃时产生的.dmp文件,通过使用Python脚本自动化处理流程,包括生成符号文件、组织目录结构以及转换.minidump文件为易于阅读的日志文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知,在android系统上,有时候我们遇到so文件的crash仅仅能打log,可是非常多时候并不知道crash在什么地方,幸运的是crash后,一般能够产生一个.dmp文件。

我们能够依据这个文件来得到更为具体的statck trace。

主要用的就是google提供的一些方法,命令太复杂,非常easy出错,所以我写了一个python脚本,简化步骤。

详情能够參考 https://code.google.com/p/google-breakpad/wiki/LinuxStarterGuide


#! /usr/bin/env python


import os
import sys

if len(sys.argv) < 3:
    print("please check your parameter")
    exit(-1)

soFile = sys.argv[1]
dmpFile = sys.argv[2]

print soFile,
print dmpFile

symFile = soFile + ".sym"

#dumple sym file
os.system("./dump_syms " + soFile  + " > " + symFile)

#get directory information
ret = os.popen("head -n1 " + symFile).read()
arry = ret.strip().split(" ")
dirName = arry[3]
symPath = "./symbols/" + soFile + "/" + dirName

#create directory
os.system("mkdir -p " + symPath)
os.system("mv " + symFile + " " + symPath)

#minidump to log file
os.system("./minidump_stackwalk " + dmpFile + " ./symbols > crashlog")



Backtrace: #00 pc 000000000005d9c4 /apex/com.android.runtime/lib64/bionic/libc.so (abort+164) (BuildId: 41b260160dbd4aae2b04f90d937b7e4f) #01 pc 0000000000014abc /system/lib64/libbase.so (android::base::DefaultAborter(char const*)+12) (BuildId: 60e5261000aaaa4206a16ca816e8d913) #02 pc 00000000000a53ec /system/lib64/libbinder.so (android::base::SetAborter(std::__1::function<void (char const*)>&&)::$_0::__invoke(char const*) (.__uniq.304115623023563947864004479300660821567)+60) (BuildId: 22440d9a55c014f3ddc28a80f336d7c7) #03 pc 00000000000156d0 /apex/com.android.art/lib64/libbase.so (android::base::LogMessage::~LogMessage()+516) (BuildId: 1470f61c05962eb04fafe76bd58bf664) #04 pc 0000000000890c08 /apex/com.android.art/lib64/libart.so (art::JNI<false>::FatalError(_JNIEnv*, char const*)+196) (BuildId: c35c9ebf7bb06435e4b31977d87bd5d5) #05 pc 000000000013c03c /system_ext/lib64/libstnfc_nci_jni.so (android::stNfcManager_doAbort(_JNIEnv*, _jobject*, _jstring*)+60) (BuildId: bc256ab9c81d664a26e98b7c906517da) #06 pc 00000000000990bc /system/framework/arm64/boot.oat (art_jni_trampoline+124) (BuildId: 99295d3fa7cfe561936e19bb043a43bf66b8d323) #07 pc 0000000000044460 /data/dalvik-cache/arm64/system_ext@priv-app@Nfc_st@Nfc_st.apk@classes.dex (com.android.nfc.NfcService$WatchDogThread.run+544) #08 pc 000000000036d574 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612) (BuildId: c35c9ebf7bb06435e4b31977d87bd5d5) #09 pc 0000000000358bc0 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+132) (BuildId: c35c9ebf7bb06435e4b31977d87bd5d5) #10 pc 0000000000944608 /apex/com.android.art/lib64/libart.so (art::detail::ShortyTraits<(char)86>::Type art::ArtMethod::InvokeInstance<(char)86>(art::Thread*, art::ObjPtr<art::mirror::Object>, art::detail::ShortyTraits<>::Type...)+60) (BuildId: c35c9ebf7bb06435e4b31977d87bd5d5) #11 pc 0000000000625d24 /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+1344) (BuildId: c35c9ebf7bb06435e4b31977d87bd5d5) #12 pc 00000000006257d4 /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallbackWithUffdGc(void*)+8) (BuildId: c35c9ebf7bb06435e4b31977d87bd5d5) #13 pc 0000000000070098 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+200) (BuildId: 41b260160dbd4aae2b04f90d937b7e4f) #14 pc 0000000000061410 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 41b260160dbd4aae2b04f90d937b7e4f)
最新发布
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值