Android 产生ANR后的Trace文件的解析

简介: Android 产生ANR后的Trace文件的解析


第一个框中第一二行说明了发生ANR的进程ID,名称和时间

第三个框中

“main” prio=5 tid=1 Native

说明了线程名称,线程优先级,线程锁id和线程状态。tid不是线程id,是一个在Java虚拟机中用来实现线程锁的变量,线程状态分为以下几类:

状态 值 说明

THREAD_ZOMBIE 0 TERMINATED 线程死亡,终止运行

THREAD_RUNNING 1 RUNNABLE or running now 线程可运行或正在运行

THREAD_TIMED_WAIT 2 TIMED_WAITING in Object.wait() 执行了带有超时参数的wait,sleep或join参数

THREAD_MONITOR 3 BLOCKED on a monitor 线程阻塞,等待获取对象锁

THREAD_WAIT 4 执行了无超时参数的wait()函数

THREAD_INITIALIZING 5 allocated not yet running 新建,正在初始化,为其分配资源

THREAD_STARTING 6 started not yet on thread list 新建,正在启动

THREAD_NATIVE 7 off in a JNI native method 正在执行JNI本地函数

THREAD_VMWAIT 8 waiting on a VM resource 正在等待VM资源

THREAD_SUSPENDED 9 suspended usually by GC or debugger 线程暂停,通常是由于GC或者debug被暂停

特别说明线程状态为MONITOR和SUSPEND。MONITOR状态一般是类的同步块或者同步方法造成的,而SUSPEND状态是debugger的时候会出现,可以用来区别是不是真的是用户正常操作跑出来ANR

| group=“main” sCount=1 dsCount=0 flags=1 obj=0x74491f18 self=0xe5490000

后面一行group为线程组名称,sCount是线程被挂起的次数,dsCount是线程被调试器挂起的次数。当一个进程开始调试后sCount会变为0,调试结束判断是否被正常挂起进行增长,但是dsCount不会变为0,所以dsCount可以用来判断这个线程是否被调试过,obj为线程java对象的地址,self表示这个线程本身的地址

| sysTid=14761 nice=-10 cgrp=default sched=0/0 handle=0xe90e9494

在此后是线程的调度信息:sysTid是Linux下的内核线程ID,nice是线程的调度优先级,sched分别标志了线程的调度策略和优先级,cgrp是调度数组,handle是线程的处理函数地址

| state=S schedstat=( 808116553592 297347340368 970474 ) utm=71464 stm=9347 core=3 HZ=100

接着state是调度状态,utm是线程用户态下使用的时间值,stm是内核态下的调度时间值,core是最后执行这个线程的cpu核的序号

至此trace解析差不多完成。

大部分情况下trace文件顶部的线程一般是ANR的元凶,但是也有可能不是应用造成的ANR。

死锁和等待也会造成ANR,比如线程状态为MONITOR的时候正在执行一个同步块,但是锁却被另外一个线程拿着造成主线程阻塞(等待);死锁的分析也是类似,发生死锁的线程一般处于MONITOR状态或者WAIT状态,等待其他进程的锁或者monitor,而其他进程又在等待另外线程的锁或者monitor,一直这样依赖下去,直到形成一个环。

(参考链接:

1.https://blog.csdn.net/yxz329130952/article/details/50087731/

2.https://blog.csdn.net/lovelease/article/details/81988696

3.https://www.cnblogs.com/wanqieddy/archive/2013/12/26/3492373.html


相关文章
|
7月前
|
数据采集 监控 API
告别手动埋点!Android 无侵入式数据采集方案深度解析
传统的Android应用监控方案需要开发者在代码中手动添加埋点,不仅侵入性强、工作量大,还难以维护。本文深入探讨了基于字节码插桩技术的无侵入式数据采集方案,通过Gradle插件 + AGP API + ASM的技术组合,实现对应用性能、用户行为、网络请求等全方位监控,真正做到零侵入、易集成、高稳定。
864 93
|
12月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
357 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
12月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
1039 19
|
11月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
473 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
|
12月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
2848 2
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
564 15
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
10050 2
|
Java API 数据处理
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
800 4
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
889 140
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1393 29

推荐镜像

更多
  • DNS