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/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 APP性能分析方法及工具
近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...
- android出现backtrace 定位方法
- 分析Android程序之破解第一个程序
破解Android程序通常的方法是将apk文件利用ApkTool反编译,生成Smali格式的反汇编代码,然后阅读Smali文件的代码来理解程序的运行机制,找到程序的突破口进行修改,最后使用ApkToo ...
- ZT Android Debuggerd的分析及使用方法
Android Debuggerd的分析及使用方法 分类: 移动开发 android framework 2012-12-28 12:00 983人阅读 评论(0) 收藏 举报 目录(?)[+] An ...
- 【Bugly干货分享】手把手教你逆向分析 Android 程序
很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下. 第一张图是在把代码注入到地图里面,启动首页的时候弹出个浮窗,下载网络的 ...
- 在Eclipse中使用MAT分析Android程序内存使用状况(转)
对于Android这种手持设备来说,通常不会带有太大的内存,而且一般用户都是长时间不重启手机,所以编写程序的时候必须要非常小心的使用内存,尽量避免有内存泄露的问题出现.通常分析程序中潜在内存泄露的问题 ...
- 谈使用Eclipse与DDMS调试Android程序的方法
在Eclipse开发工具中调试程序的方法很多,但是使用Eclipse调试Android程序时需要注意一些细节上的问题.许多刚接触 Android的开发者,在调试Android程序时总是不能迅速地找到程 ...
- Android 内存泄漏分析与解决方法
在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...
- 用Ant手动打包android程序,android分包机制解决65536方法过多异常
Android利用ant手动打包 首先我们要给自己的IDE eclispe配置ant,默认的eclipse是集成了ant构建工具的,但是google提供的Android集成开发工具ADT,里面封装了E ...
随机推荐
- HTML中<script>的defer属性与async属性
defer 属性会在 DOMLoaded 事件之前完成异步加载,加载不会阻塞 DOM 解析,并且 script 的顺序会按照 DOM 中的顺序加载. async 属性就是异步加载,没有什么顺序的保证.
- material palette
https://www.materialpalette.com/
- 转:Jmeter分布式测试
在使用Jmeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能. 一.Jmeter分 ...
- 【noip模拟赛5】细菌 状压dp
[noip模拟赛5]细菌 描述 近期,农场出现了D(1<=D<=15)种细菌.John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶.但是如果选中的奶牛携 ...
- chm制作及Haroopad使用(makedown工具)
所需工具 1.网文快捕(可以制作chm的工具,在IE浏览起立可以右键把复制内容保存到软件里) 下载地址:http://www.05sun.com/downinfo/278913.html 2.Haro ...
- Tornado创建一个web服务
import tornado.web import tornado.ioloop import tornado.httpserver import tornado.options import con ...
- java搭建SSM的Web开发框架-整合这3者用到的配置文件
1./WEB-INF/web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmln ...
- 永久注册Oracle工具PL/SQL
- 在MSYS2环境下 用msvc 编译 zlib
自己参考用. 在 vs2017 x64 native tools command prompt 下用 msys2_shell.cmd -use-full-path 打开 MSYS2窗口. 新建bui ...
- Linux 安装源码软件
linux下,源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install) 过程中用到configure --prefix --with:其中--pr ...