Android程序backtrace分析方法

如何分析Android程序的backtrace

最近碰到Android apk crash的问题,单从log很难定位。从tombstone里面得到下面的backtrace。

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: ‘Android/msm8996/msm8996:7.1.2/N2G47H/20180921.193127:userdebug/test-keys‘
Revision: ‘0‘
ABI: ‘arm64‘
pid: 2848, tid: 3158, name: Thread-5819  >>> com.company.package <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
    x0   0000007fa5ae0a60  x1   0000000000000000  x2   0000000000000008  x3   0000000000000010
    x4   0000000000000000  x5   c6a4a7935bd1e995  x6   c6a4a7935bd1e995  x7   0000000000000000
    x8   0000007fa5ae0ab8  x9   0000007f8d4e2ac8  x10  0000000000000174  x11  0000000000000000
    x12  0000007f8d4e2ac8  x13  ffffffffffffffff  x14  0000000000000000  x15  003b9aca00000000
    x16  0000007f98060850  x17  0000007fb69177c0  x18  0000000000000020  x19  0000007f97a12330
    x20  0000007f870feb68  x21  0000007f870feb40  x22  0000000000000000  x23  0000007f7ef07ac0
    x24  0000007f870fea78  x25  0000007f978c03a0  x26  0000007f870ff2f0  x27  0000007f870fea20
    x28  0000007f870feba0  x29  0000007f870fe6f0  x30  0000007f9725f6c8
    sp   0000007f870fe6f0  pc   0000007f9725f6c8  pstate 0000000080000000
    v0   00000000000000000000000000000000  v1   00000000000000000000000000000000
    v2   00000000000000000000000000000000  v3   00000000000000000000000000000000
    v4   00000000000000004000000000000000  v5   00000000000000000000000000000000
    v6   00000000000000000000000000000000  v7   00000000000000000000000000000000
    v8   0000000000000000000000003ce0e100  v9   00000000000000000000000042ff0000
    v10  0000000000000000000000003f800000  v11  00000000000000000000000000000000
    v12  00000000000000000000000000000000  v13  00000000000000000000000000000000
    v14  00000000000000000000000000000000  v15  00000000000000000000000000000000
    v16  000000000000000000000000c307e06a  v17  0000000000000000fffefffdfffdfffe
    v18  0000000000000000fffffffefffeffff  v19  000000000000000000ee00ee00ee00ee
    v20  000000000000000000040003fffdfffc  v21  000000000000000000ef00ef00ed00ec
    v22  00000002000000020000000200000002  v23  00000000000000000000000000000148
    v24  00000000000000000000000000000001  v25  00000000000000000000000000000029
    v26  0000000000000000000000003e800000  v27  000000000000000000000000bf737871
    v28  0000000000000000000000003f737871  v29  00000000000000000000007f8d52cf38
    v30  00000000000000000000000000000140  v31  000000000000000000000000bfc4f8c4
    fpsr 0000001b  fpcr 00000000

backtrace:
    #00 pc 00000000000a96c8  /system/app/Package/Package.apk (offset 0x5c1000)
    #01 pc 00000000000b4574  /system/app/Package/Package.apk (offset 0x5c1000)
    #02 pc 00000000000d52f0  /system/app/Package/Package.apk (offset 0x5c1000)
    #03 pc 00000000000367ac  /system/app/Package/Package.apk (offset 0xe0e000)
    #04 pc 0000000000033070  /system/app/Package/Package.apk (offset 0xe0e000)
    #05 pc 0000000000176910  /system/app/Package/Package.apk (offset 0xe0e000)
    #06 pc 0000000000068618  /system/lib64/libc.so (_ZL15__pthread_startPv+196)
    #07 pc 000000000001df68  /system/lib64/libc.so (__start_thread+16)

一看这个backtrace有点傻眼。通常得到的backtrace应该会打印出调用的so还有相应的函数名,这个不知道怎么回事只显示出apk的名字。调查了半天,怀疑是只有在apk是install的时候,才会有符号表的信息,出现有信息的打印。我们这个出现问题的时候,apk是编到rom里的,so库的符号表应该都被stip掉了。但是问题是这个crash很难重现,安装apk以后一直复现不了。好在这个apk自己只有三个so库,用addr2line试一试应该容易试出来。Android的sdk里自带了addr2line的工具,我们用的ndk13b版本,在windows上这个工具所在的目录是\Android\Sdk\android-ndk-r13b\toolchains\x86_64-4.9\prebuilt\windows-x86_64\bin,用-e参数指定文件名,-f参数显示函数名。果然,很容易就试出来是哪个so了。

$ ./x86_64-linux-android-addr2line.exe -e ~/StudioProjects/Service/package/app/build/intermediates/cmake/debug/obj/arm64-v8a/libndk_camera.so -f 176910
execute_native_thread_routine
/usr/local/google/buildbot/src/android/ndk-r13-release/toolchain/gcc/gcc-4.9/libstdc++-v3/src/c++11/thread.cc:84

$ ./x86_64-linux-android-addr2line.exe -e ~/StudioProjects/RobotVisionService/package/app/build/intermediates/cmake/debug/obj/arm64-v8a/libndk_camera.so -f 33070
_ZNKSt7_Mem_fnIM12CameraEngineFvvEEclIJEvEEvPS0_DpOT_
C:/Users/qwang/AppData/Local/Android/Sdk/android-ndk-r13b/sources/cxx-stl/gnu-libstdc++/4.9/include/functional:569 (discriminator 4)

$ ./x86_64-linux-android-addr2line.exe -e ~/StudioProjects/RobotVisionService/package/app/build/intermediates/cmake/debug/obj/arm64-v8a/libndk_camera.so -f 367ac
_ZN12CameraEngine12ProcessFrameEv
C:\Users\qwang\StudioProjects\RobotVisionService\package\app\src\main\cpp/camera_engine.cpp:525 (discriminator 2)

$ ./x86_64-linux-android-addr2line.exe -e ~/StudioProjects/RobotVisionService/package/app/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so -f d52f0
_ZN9OrionAlgo38vision_Algo_regressFacekeypointFromMatEN2cv3MatEiiii
C:\Users\qwang\StudioProjects\RobotVisionService\package\app\src\main\cpp/OrionAlgo.cpp:107

$ ./x86_64-linux-android-addr2line.exe -e ~/StudioProjects/RobotVisionService/package/app/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so -f b4574
_ZN6vision13TrackStrategy13trackOrDetectERN2cv3MatEPNS_3SSDERSt6vectorI3BoxSaIS7_EEf
C:\Users\qwang\StudioProjects\RobotVisionService\package\app\src\main\cpp\src\main\cpp\inference\postproc\src/track_strategy.cpp:38

$ ./x86_64-linux-android-addr2line.exe -e ~/StudioProjects/RobotVisionService/package/app/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so -f a96c8
_ZN6vision3SSD6detectERN2cv3MatERSt6vectorI3BoxSaIS5_EE
C:\Users\qwang\StudioProjects\RobotVisionService\package\app\src\main\cpp\src\main\cpp\inference\algo\src/ssd.cpp:82

原文地址:https://www.cnblogs.com/mightycode/p/9712593.html

时间: 2024-08-03 08:02:44

Android程序backtrace分析方法的相关文章

Android APP性能分析方法及工具

近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借鉴.英文好的读者可读原文(链接:http://blog.udinic.com/2015/09/15/speed-up-your-app). 1.作者的规则 作者每次着手处理或寻找性能问题时,遵循下列规则: 时常检测 在更新APP前后,用测试工具软件多检测几次APP性能,可快速得到测试数据.这些数字是不会说谎的

android出现backtrace 定位方法

原文地址:https://www.cnblogs.com/yuguangyuan/p/11715688.html

分析Android程序之破解第一个程序

破解Android程序通常的方法是将apk文件利用ApkTool反编译,生成Smali格式的反汇编代码,然后阅读Smali文件的代码来理解程序的运行机制,找到程序的突破口进行修改,最后使用ApkTool重新编译生成apk文件并签名,最后运行测试,如此循环,直至程序被成功破解. 1. 反编译APK文件 ApkTool是跨平台的工具,可以在windows平台与linux平台下直接使用.使用前到:http://code.google.com/p/android-apktool/  下载ApkTool,

如何分析Android程序之破解第一个程序

破解Android程序通常的方法是将apk文件利用ApkTool反编译,生成Smali格式的反汇编代码,然后阅读Smali文件的代码来理解程序的运行机制,找到程序的突破口进行修改,最后使用ApkTool重新编译生成apk文件并签名,最后运行测试,如此循环,直至程序被成功破解. 1. 反编译APK文件 ApkTool是跨平台的工具,可以在windows平台与linux平台下直接使用.使用前到:http://code.google.com/p/android-apktool/  下载ApkTool,

在Eclipse中使用MAT分析Android程序内存使用状况(转)

对于Android这种手持设备来说,通常不会带有太大的内存,而且一般用户都是长时间不重启手机,所以编写程序的时候必须要非常小心的使用内存,尽量避免有内存泄露的问题出现.通常分析程序中潜在内存泄露的问题是一件很有难度的工作,一般都是由团队中的资深工程师负责,而且随着程序代码量的提高,难度还会逐步加大. 今天要介绍一个在Eclipse中使用的内存分析工具——MAT(Eclipse Memory Analyzer,主页在http://www.eclipse.org/mat/).它是一个功能非常丰富的J

【Bugly干货分享】手把手教你逆向分析 Android 程序

很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下. 第一张图是在把代码注入到地图里面,启动首页的时候弹出个浮窗,下载网络的图片,苍老师你们不会不认识吧? 第二张图是微信运动步数作弊,6不6?ok,那我们从头说起 1.反编译 Android 的反编译,相信大家都应该有所了解,apktool.JEB 等工具我们先看一下 Apk 文件的结构吧,如下图: 1.META-INF:签名文件(这个是如何生成的后面会提到)2.res:

安全和逆向:如何逆向分析Android程序

经过前面对各种反编译工具apktool,dx2jar,jd-gui等工具的介绍,本章节我们结合一个实际的案例,向大家讲解如何分析Android程序. 一.分析步骤 1.使用dex2jar和jd-gui工具分析Java反编译源码: 2.使用apktools,反编译Smail文件.由于Smail语法单独阅读比较困难,我们可以结合Java反编译的源码进行分析: 3.根据相关的特征和线索,修改Smail源码,使用apktools重新打包: 4.使用jarsigner重新签名apk,安装并验证修改是否正确

linux 程序分析方法

1. 背景 现实中,我们需要学习已有的软件构造方法,或维护旧的软件,或添加新功能,亦或优化性能, 这时面对的代码都不是自己所写,那如何才能快速知道这个代码库干了什么,源文件如何组织,模块间如何交互? 2. 程序的运转 a)应用程序:一般是一个语法树结构,树的叶子结点或是简单的操作(+.-.=等),或是系统调用(read.write.sleep), 树根一般是main:如果有多线程/进程,那就会产生多颗树:在出现递归调用时,也会出现环路. b)内核:内核是应用与硬件间的中间层,交互方法就是软中断和

Android程序 依赖库引用Gson 报java.lang.NoClassDefFoundError: com/google/gson/Gson 解决方法

Android 程序所依赖一个Library程序B , B 程序中用到格式化json串,转换成标准json串的要求 public static String jsonFormatter(String uglyJSONString) { Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonParser jp = new JsonParser(); JsonElement je = jp.parse(uglyJSONStri