Android程序backtrace分析方法

mightycode 2018-10-11 原文

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

posted on 2018-10-11 20:04 爱鱼 阅读() 评论() 编辑 收藏

 

 
版权声明:本文为mightycode原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/mightycode/p/9712593.html

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

随机推荐

  1. Hadoop HBase概念学习系列之HBase里的客户端和HBase集群建立连接(详细)(十四)

        需要遵循以下步骤:   1、客户端和Zookeeper集群建立连接。在这之前客户端需要获得一些信息(可 […]...

  2. SharePoint 2010安装配置详解

    SharePoint 2010 只有64位版本的,没有32位版本,也就意味着你需要一台64位机器,Sql Se […]...

  3. 个人工具库(持续更新中)

    主要分享自己日常工作中常用的工具函数,希望能够对大家有帮助。工具函数不定时持续更新中…… 本篇目录: 1.截取 […]...

  4. 技术指标分类

    趋势指标   MA MACD BOLL 震荡指标   KDJ,RSI,W%R 大势类(只能市场,不能个股)   […]...

  5. java_study

    安装开发环境JDK 是一个软件包,其中包含各种工具和实用程序,可以开发、打包、监控和部署为任何标准 Java 平台构建的应用程序,包括 Java 平台标准版 (Java SE); Java 平台,微型版 (Java ME);和 Jav...

  6. 网易云->Spotify

    网易云->Spotify 如题, 本文介绍如何将网易云歌单导入到Spotify。 有一个Spotify账 […]...

  7. 初识云计算:历史、服务、架构

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍 […]...

  8. 修改 Hosts 解决 Github 访问缓慢问题

    修改 Hosts 解决 Github 访问缓慢问题 背景 最近访问 Github 经常出现访问速度慢的问题,甚 […]...

展开目录

目录导航