从事andriod系统开发以来接触了不少crash相关的问题,对于Crash分为Framework/App Crash, Native Crash,以及Kernel Crash

对于他们的解释

对于framework层或者app层的Crash(即Java层面Crash),那么往往是通过抛出未捕获异常而导致的Crash,这个内容在本文的姊妹篇理解Android Crash处理流程已详细介绍过。
至于Kernel Crash,很多情况是发生Kernel panic,对于内核崩溃往往是驱动或者硬件出现故障。
Native Crash,即C/C++层面的Crash,这是介于系统framework层与Linux层之间的一层,这是本文接下来要讲解的内容。
来自http://gityuan.com/2016/06/25/android-native-crash/
直接贴上一个实际遇到的问题:
【测试步骤】
1.执行Monkey,观察结果
【预期结果】
1.步骤1后,不会出现各模块报错现象
【实际结果】
1.步骤1后,出现com.android.chrome报错2次
Log:

01-03 06:37:34.853 W/System  (17354): ClassLoader referenced unknown path: /system/app/Chrome/lib/arm
01-03 06:37:34.913 W/DynamiteModule(17354): Local module descriptor class for com.google.android.gms.googlecertificates not found.
01-03 06:37:34.999 W/System  (17354): ClassLoader referenced unknown path: /system/priv-app/GmsCore/lib/arm
01-03 06:37:35.018 W/System  (17354): ClassLoader referenced unknown path:
01-03 06:37:35.019 W/System  (17354): ClassLoader referenced unknown path: /system/priv-app/GmsCore/lib/arm
01-03 06:37:35.278 W/System  (17354): ClassLoader referenced unknown path: /data/user/0/com.google.android.gms/app_chimera/m/00000001/n/armeabi
01-03 06:37:35.467 W/art     (17354): Verification of void lz.<clinit>() took 133.298ms
01-03 06:37:35.795 W/chromium(17354): [WARNING:dns_config_service_posix.cc(316)] Failed to read DnsConfig.
01-03 06:37:36.138 W/cr_KnoxSettingsProvider(17354): Permission to read device policy denied.
01-03 06:37:36.157 W/cr_ChildProcLauncher(17354): Create a new ChildConnectionAllocator with package name = com.android.chrome, inSandbox = true
01-03 06:37:36.397 E/JavaBinder(17354): !!! FAILED BINDER TRANSACTION !!!  (parcel size = 9576)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354): Failed to setup connection.
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354): android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at android.os.BinderProxy.transactNative(Native Method)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at android.os.BinderProxy.transact(Binder.java:615)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at org.chromium.content.common.IChildProcessService$Stub$Proxy.setupConnection(IChildProcessService.java:102)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at org.chromium.content.browser.ChildProcessConnectionImpl.doConnectionSetupLocked(ChildProcessConnectionImpl.java:374)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at org.chromium.content.browser.ChildProcessConnectionImpl$ChildServiceConnection.onServiceConnected(ChildProcessConnectionImpl.java:15032)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1453)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1481)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at android.os.Handler.handleCallback(Handler.java:751)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at android.os.Handler.dispatchMessage(Handler.java:95)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at android.os.Looper.loop(Looper.java:154)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at android.app.ActivityThread.main(ActivityThread.java:6119)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at java.lang.reflect.Method.invoke(Native Method)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
01-03 06:37:36.400 E/cr_ChildProcessConnect(17354):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
01-03 06:37:36.437 W/InstanceID/Rpc(17354): Found 10013
01-03 06:37:36.478 W/cr_ChildProcessConnect(17354): onServiceDisconnected (crash or killed by oom): pid=0
01-03 06:38:02.350 W/cr_ChildProcessConnect(17354): onServiceDisconnected (crash or killed by oom): pid=17425
01-03 06:38:15.547 W/cr_tabmodel(17354): Starting to fetch tab list.
01-03 06:38:15.551 W/cr_tabmodel(17354): Finished fetching tab list.
01-03 06:38:15.551 W/cr_tabmodel(17354): Starting to fetch tab list.
01-03 06:38:15.552 E/cr_tabmodel(17354): State file does not exist.
01-03 06:38:15.652 W/Adreno-ES20(17354): <get_gpu_clk:229>: open failed: errno 13
01-03 06:38:16.304 E/cr_tabmodel(17354): Tab load still in progress when merge was attempted.
01-03 06:38:29.059 W/cr_ChildProcessConnect(17354): onServiceDisconnected (crash or killed by oom): pid=17638
01-03 06:38:35.859 F/chromium(17354): [FATAL:context_provider_factory_impl_android.cc(243)] Timed out waiting for GPU channel.
01-03 06:38:36.644 W/google-breakpad(17354): Output crash dump file:
01-03 06:38:36.644 W/google-breakpad(17354): /data/user/0/com.android.chrome/cache/Crash Reports/1ec54077-39cc-f1f0-1e85cf48-4f7c1af2.dmp
01-03 06:38:36.650 W/google-breakpad(17354): ### ### ### ### ### ### ### ### ### ### ### ### ###
01-03 06:38:36.650 W/google-breakpad(17354): Chrome build fingerprint:
01-03 06:38:36.650 W/google-breakpad(17354): 55.0.2883.91
01-03 06:38:36.651 W/google-breakpad(17354): 288309152
01-03 06:38:36.651 W/google-breakpad(17354): ### ### ### ### ### ### ### ### ### ### ### ### ###
01-03 06:38:36.784 W/google-breakpad(17354): ### ### ### ### ### ### ### ### ### ### ### ### ###
01-03 06:38:36.784 W/google-breakpad(17354): Chrome build fingerprint:
01-03 06:38:36.785 W/google-breakpad(17354): 55.0.2883.91
01-03 06:38:36.785 W/google-breakpad(17354): 288309152
01-03 06:38:36.785 W/google-breakpad(17354): ### ### ### ### ### ### ### ### ### ### ### ### ###
01-03 06:38:36.791 F/libc    (17354): Fatal signal 6 (SIGABRT), code -6 in tid 17354 (.android.chrome)
01-03 06:38:36.791 F/libc    (17354): Fatal signal 6 (SIGABRT), code -6 in tid 17354 (.android.chrome)
01-03 06:38:36.792 W/        (  352): debuggerd: handling request: pid=17354 uid=10057 gid=10057 tid=17354
01-03 06:38:36.792 W/        (  352): debuggerd: handling request: pid=17354 uid=10057 gid=10057 tid=17354
01-03 06:38:36.891 F/DEBUG   (17731): pid: 17354, tid: 17354, name: .android.chrome  >>> com.android.chrome <<<
01-03 06:38:36.891 F/DEBUG   (17731): pid: 17354, tid: 17354, name: .android.chrome  >>> com.android.chrome <<<
01-03 06:38:38.361 W/        (  352): debuggerd: resuming target 17354

对于上面一大堆的Log,看了就头疼,我们只关注其中几点
01-03 06:38:36.891 F/DEBUG   (17731): pid: 17354, tid: 17354, name: .android.chrome  >>> com.android.chrome <<<
01-03 06:38:36.891 F/DEBUG   (17731): signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
该条Log告诉了我们Crash的进程号pid: 17354,线程号tid: 17354,进程名name: .android.chrome,以及Crash发送给系统的信号以及错误地址signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
因此我们初步判断chrome应用发生了native crash,那么问题来了怎么定位错误的原因呢?
这就得继续看Log了

01-03 06:38:36.926 F/DEBUG   (17731): backtrace:
01-03 06:38:36.928 F/DEBUG   (17731):     #00 pc 00049d78  /system/lib/libc.so (tgkill+12)
01-03 06:38:36.928 F/DEBUG   (17731):     #01 pc 000474f3  /system/lib/libc.so (pthread_kill+34)
01-03 06:38:36.928 F/DEBUG   (17731):     #02 pc 0001d745  /system/lib/libc.so (raise+10)
01-03 06:38:36.928 F/DEBUG   (17731):     #03 pc 00019281  /system/lib/libc.so (__libc_android_abort+34)
01-03 06:38:36.928 F/DEBUG   (17731):     #04 pc 000172e8  /system/lib/libc.so (abort+4)
01-03 06:38:36.928 F/DEBUG   (17731):     #05 pc 008fa231  /system/app/Chrome/Chrome.apk (offset 0x4236000)

以上Log就是出错时寄存器中出错的地方,我们可以通过NDK中的工具包解析出具体出错的地方,步骤如下:
使用arm-linux-androideabi-objdump  定位出错的函数信息

D:\tool\Ndk\android-ndk-r13b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin>arm-linux-androideabi-objdump.exe-S  -D D:\tool\parse_stack.rev6\libc.so > D:\tool\parse_stack.rev6\log.txt
使用如上命令别可以解析出so库中具体函数汇编码(具体的现在我也看不懂)
类似下面一大坨

   172bc: e2922008  adds r2, r2, #8172c0: 03a00000  moveq r0, #0172c4: 0affffb1  beq 17190 <memcmp+0x134>172c8: eaffffaa  b 17178 <memcmp+0x11c>172cc: e2411004  sub r1, r1, #4172d0: e04111a6  sub r1, r1, r6, lsr #3172d4: e2444004  sub r4, r4, #4172d8: e3a02004  mov r2, #4172dc: e8bd00e0  pop {r5, r6, r7}172e0: eaffffa4  b 17178 <memcmp+0x11c>
000172e4 <abort>:172e4: e92d4008  push {r3, lr}172e8: fb0007db  blx 1925e <__libc_android_abort>

.......
其中我们就可以根据backtrace提供的错误栈信息搜索出出错位置比如根据#04 pc 000172e8  /system/lib/libc.so (abort+4)中的172e8,然后搜索我们发现
1 72e8: fb0007db  blx 1925e <__libc_android_abort>这样的一条信息,但是这还是不具体,对于到了这步,还不能得到具体的出错原因的我们就应该回头再看看整体的Log
一般情况下内存地址被挤占了,或者因为内存不够的原因,我们往前寻找Log发现果然有相关的Log
onServiceDisconnected (crash or killed by oom): pid=0
不难推测该Native Crash是由于系统oom或者其他外力因素导致的.
至此这个问题的大致分析的思路就清楚了

Android ANR问题分析相关推荐

  1. 转 android anr 分析示例,[摘]Android ANR日志分析指南之实例解析

    前文<[摘]Android ANR日志分析指南>也摘抄了如何分析,接下来通过实例解析. 一.主线程被其他线程lock,导致死锁 waiting on <0x1cd570> (a ...

  2. Android ANR 实例分析

    什么是ANR? 以下四个条件都可以造成ANR发生: InputDispatching Timeout:5秒内无法响应屏幕触摸事件或键盘输入事件 BroadcastQueue Timeout :在执行前 ...

  3. Android ANR日志分析进行曲

    定义 ANR(Application Not Responding) 应用程序无响应.如果你应用程序在UI线程被阻塞太长时间,就会出现ANR,通常出现ANR,系统会弹出一个提示提示框,让用户知道,该程 ...

  4. Android ANR日志分析指南,android查看网络请求和响应

    既然不是CPU负载的原因,那么到底是什么原因呢? 这时就要看我们的终极大杀器--traces.txt. 二. traces.txt 日志分析 当APP不响应.响应慢了.或者WatchDog的监视没有得 ...

  5. android anr 产生的类型及原因

    android anr 产生的条件 android 系统中anr的本质是主线程无法响应.而导致主线程无法响应的原因大致如下: 主线程请求网络资源,数据库访问或者io访问,这些操作都是耗时操作,主线程处 ...

  6. Android 系统(135)---Android anr 分析步骤总结

    Android anr 分析步骤总结 前言:最近经手了比较多的anr问题,声明经手不是解决,只是从log上推断造成anr的原因,以此作为根据转交给对应的人来处理. 1. ANR简介 ANR全名Appl ...

  7. Android ANR bugreport log分析

    最近工作中频繁遇到设备ANR问题,而且是概率性的那种,于是决定花点时间找找规律复现分析下 说道这里,抓日志是问题解决的最有效途径,这里不得不说一下 bugreport log,其实网上关于它的分析方法 ...

  8. Android ANR分析-笔记

    1.什么是ANR ANR:Application Not Responding,即应用无响应 2.ANR的类型 1.KeyDispatchTimeout(5 seconds).按键或触摸事件在5s内无 ...

  9. 【Android】如何分析 ANR 日志

    前言 前两天,我已经写了一篇文章对 ANR 的产生原理进行了简单的探讨,链接如下: [Android]ANR 原理解析 感兴趣的大佬可以前去观摩观摩,今天这篇文章,将写写如何进行 ANR 日志的分析. ...

最新文章

  1. html在页面上div绝对定位,html – 中心浮动div在绝对定位div内
  2. i-jetty环境搭配与编译
  3. HtmlUnit爬取页面列表链接
  4. Social network Social computing(社会网络和社会计算)
  5. aftool提示15天未更新_微信版本更新至7.0.15 视频号新增3种功能
  6. MySql优化 (2009-08-28 系统架构师大会) 演讲ppt
  7. abd shell关闭所有程序_在后台服务器上运行程序
  8. 数据结构之顺序表(一)
  9. LeetCode 1852. 每个子数组的数字种类数(滑窗)
  10. only 程序员的一个小总结
  11. python线程监控_Python多线程的事件监控
  12. WinForm软件开机自动启动详细方法
  13. hdu 6096 String(AC自动机巧妙建图)
  14. Socket编程入门(一)实现简单的Socket实例
  15. NXP:I2C总线技术规范和用户手册(中文版)(一)
  16. 前端实现html转pdf方法总结
  17. 小米怎么和计算机连接网络连接网络,电脑怎么连接小米路由器上网
  18. 使用icepdf将pdf转换为图片时出现乱码的问题
  19. 怎样恢复计算机到桌面,电脑任务栏怎么还原到下面 电脑任务栏还原方法【图文】...
  20. 互联网金融项目数据分析

热门文章

  1. 银行数字化转型导师坚鹏:学习贯彻二十大精神 解码乡村振兴之道
  2. 李阳疯狂英语900句
  3. 网站备案流程[菜鸟必看],
  4. 获得指定年份的四个季度 Get start date and end date for all quarters of the year.
  5. 使用Go开发的数字书架应用 | Gopher Daily (2021.07.05) ʕ◔ϖ◔ʔ
  6. html5卷轴展开动画,古卷轴平滑打开jQuery动画特效
  7. Android电视应用开发环境搭建
  8. kvm虚拟化介绍及部署
  9. The content of element type “mapper“ must match “EMPTY“.错误
  10. android软件图标设计工具,软件图标制作器