如何分析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库的符号表应该都被strip掉了。但是问题是这个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/Service/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/Service/package/app/build/intermediates/cmake/debug/obj/arm64-v8a/libndk_camera.so -f 367ac

_ZN12CameraEngine12ProcessFrameEv

C:\Users\qwang\StudioProjects\Service\package\app\src\main\cpp/camera_engine.cpp:525 (discriminator 2)

$ ./x86_64-linux-android-addr2line.exe -e ~/StudioProjects/Service/package/app/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so -f d52f0

_ZN9OrionAlgo38vision_Algo_regressFacekeypointFromMatEN2cv3MatEiiii

C:\Users\qwang\StudioProjects\Service\package\app\src\main\cpp/OrionAlgo.cpp:107

$ ./x86_64-linux-android-addr2line.exe -e ~/StudioProjects/Service/package/app/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so -f b4574

_ZN6vision13TrackStrategy13trackOrDetectERN2cv3MatEPNS_3SSDERSt6vectorI3BoxSaIS7_EEf

C:\Users\qwang\StudioProjects\Service\package\app\src\main\cpp\src\main\cpp\inference\postproc\src/track_strategy.cpp:38

$ ./x86_64-linux-android-addr2line.exe -e ~/StudioProjects/Service/package/app/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so -f a96c8

_ZN6vision3SSD6detectERN2cv3MatERSt6vectorI3BoxSaIS5_EE

C:\Users\qwang\StudioProjects\Service\package\app\src\main\cpp\src\main\cpp\inference\algo\src/ssd.cpp:82

android backtrace,Android程序backtrace分析方法相关推荐

  1. android 程序更换字体,Android修改自己程序字体的方法详解

    Android提供三种字体:"Sans","serif"和"monospace". 1.在Android XML文件中设置字体可以采用and ...

  2. Android 系统(126)---Android的死机、重启问题分析方法

    Android的死机.重启问题分析方法 阅读数:11986 Android的死机.重启问题分析方法 1.     死机现象 1.1      死机定义 当手机长时间无法再被用户控制操作时,我们称为死机 ...

  3. Android的死机、重启问题分析方法

    Android的死机.重启问题分析方法 原文链接:https://blog.csdn.net/jinlu7611/article/details/50592385 1.死机现象 1.1 死机定义 当手 ...

  4. android应用内存分析,Android应用程序内存分析-Memory Analysis for Android Applications

    Android应用程序内存分析 原文链接:http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html ...

  5. java 1.8签名apk_给Android的APK程序签名和重新签名的方法

    签名工具的使用Android源码编译出来的signapk.jar既可给apk签名,也可给rom签名的.使用格式: java –jar signapk.jar [-w] publickey.x509[. ...

  6. Android内存泄漏的简单检查与分析方法

    导语 内存泄漏问题大约是Android开发者最烦恼的问题之一了,项目中连续遇到几个内存泄漏问题,这里简单总结下检查分析内存泄漏的一些工具与方法. 一.什么是内存泄漏? 大家都知道,java是有垃圾回收 ...

  7. 【腾讯优测干货分享】Android内存泄漏的简单检查与分析方法

    本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d14047603a5bf1242ad01b 导语 内存泄漏问题大约是An ...

  8. Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP

    Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedH ...

  9. Android 系统(211)---Power键不亮屏分析方法

    Power键不亮屏分析方法 亮屏流程 (1)  以下是列出的整个按键唤醒的log关键点,每条都有粗体字说明其含义以及该注意的关键字: (2)  一条一条依次检查,直到如果发现某条log找不到,那问题就 ...

  10. android 初学者实现 popupwindow的自动弹出,Android popupWindow弹出窗体实现方法分析

    本文实例讲述了Android popupWindow弹出窗体实现方法.分享给大家供大家参考,具体如下: 1. 建立popupwindow显示的布局页面(普通的view任意布局) android:lay ...

最新文章

  1. 非平衡数据处理方式与评估
  2. flume案例-flume级联-组件分析
  3. Bloom Filter算法
  4. setjmp 与 longjmp
  5. Java 基础 —— enum
  6. 图像数据流识别圆形_python opencv :使用Hough变换检测圆形,数钱。
  7. 禁止双击、拖动listctrl列头
  8. 爆裂:未来社会的 9 大生存原则
  9. Java 输入输出流的一些理解
  10. 用于目标检测的细粒度动态头
  11. Cannot read property ‘detail‘ of undefined点击详情没反应
  12. Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数
  13. python 从大到小循环_Python循环小实例----猜大小
  14. P2132 小Z的队伍排列-杨氏矩阵与hook定理
  15. 33、基于CACX和R7F0C004M的瑞萨单片机入门教程
  16. 网站内容管理系统--CMS相关漏洞复现
  17. python ValueError: source code string cannot contain null bytes
  18. 腾讯会议可以录屏吗?学习两个录制会议的好方法
  19. PCA9511ADP 电子元器件 NXP恩智浦 封装MSOP8 批次22+
  20. 熟悉PhotoView的使用方法及其源码学习

热门文章

  1. 2022年初级会计职称考试经济法基础练习题及答案
  2. flash打造动漫中另一种侧面眨眼效果
  3. excel数据分析思维导图整理
  4. 【速卖通运营干货】店铺没流量、没订单?这几点帮你了解流量来源,提升出单量!
  5. 支付宝java代码_支付宝回调JAVA版代码
  6. 软件测试工程师笔试题(附带答案)
  7. 新产品如何有效的利用展示架推广出去?
  8. word报错打不开的解决方法
  9. 常见的4种类行为模式
  10. plsql结束_SQL记录-PLSQL-EXIT/CONTINUE/GOTO