Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android 产生ANR后的Trace文件的解析

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

作者头像
北洋
发布于 2021-12-08 02:13:48
发布于 2021-12-08 02:13:48
8710
举报
文章被收录于专栏:北洋csdn北洋csdn

第一个框中第一二行说明了发生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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
干货:ANR日志分析全面解析
这句话说的很笼统,要想深入分析定位ANR,需要知道更多知识点,一般来说,ANR按产生机制,分为4类:
2020labs小助手
2021/06/08
2.6K0
Bugly即将支持的ANR,精神哥告诉你是个什么鬼?
上帝说要有ANR,于是Bugly就有了ANR上报,那么ANR到底是什么? 最近很多童鞋问起精神哥ANR的问题,那么这次就来聊一下,鸡爪怎么泡才好吃,噢不,是如何快速定位ANR。 ANR是什么 简单说,通常就是App运行的时候,duang~卡住了,怎么搞都动不了。当卡住超过一定时间,Android系统认为这就是一次“ANR(Application Not Responding)”。 具体说,在以下情况发生时,会发生ANR(可能在不同ROM 中时间有所更改): 用户的输入在5s内没被App响应
腾讯Bugly
2018/03/22
2.8K1
Bugly即将支持的ANR,精神哥告诉你是个什么鬼?
ANR日志解析
这句话说的很笼统,要想深入分析定位ANR,需要知道更多知识点,一般来说,ANR按产生机制,分为4类:
派大星在吗
2021/12/16
2.2K0
Android ANR 分析学习总结
1. 什么情况下会发生anr (1). KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应 (2). BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成 (3). ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成 2. KeyDispatchTimeout超时原因 (1). 当前的事件没有机会得到处理(即UI线程正在处理
用户1127566
2018/06/06
2.2K0
ANR问题分析总结
前几天遇到了一共个ANR问题,线程阻塞问题,下面分享一下分析解决思路。 从log中可以看出是System_server超时ANR问题,在一个循环中等待。
用户7557625
2020/07/15
2.7K0
笔记37 | Android App优化之ANR详解
地址 http://www.jianshu.com/u/c187b887771f ---- 什么是ADR ANR全名Application Not Responding, 也就是"应用无响应". 当操作在一段时间内系统无法处理时, 系统层面会弹出上图那样的ANR对话框. 在Android里, App的响应能力是由Activity Manager和Window Manager系统服务来监控的. 通常在如下两种情况下会弹出ANR对话框: 5s内无法响应用户输入事件(例如键盘输入, 触摸屏幕等). Broadca
项勇
2018/06/19
1.4K0
Android高频面试专题 - 进阶篇(一)ANR
ANR:Application Not Responding,即应用无响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者Force Close。
Android扫地僧
2020/03/19
1.9K0
Android高频面试专题 - 进阶篇(一)ANR
undefined pthread_create_android studio has stopped
最近在Debug or Run Android Eclipse工程时,发现真机直接崩溃闪退,但闪退后断开数据线,重新在真机直接run则没问题,debug闪退日志报错:Dumping all threads without appropriate locks held: thread list lock mutator lock,之前调试还是好好的,为什么突然就不行了呢?
全栈程序员站长
2022/10/01
7330
undefined pthread_create_android studio has stopped
LockSupport中的park与unpark原理
LockSupport是用来创建locks的基本线程阻塞基元,比如AQS中实现线程挂起的方法,就是park,对应唤醒就是unpark。JDK中有使用的如下
爬蜥
2019/07/09
2.3K0
ANR问题的定位与分析
ANR问题,相信是日常应用测试中,各位小伙伴都会遇到的问题。本篇对ANR的类型、原因及出现场景、以及ANR定位与分析思路进行了总结!
用户5521279
2020/03/19
4.2K0
thread dump是什么意思_stack trace of thread
可以参考一下:https://blog.csdn.net/itheimach/article/details/78952304的解决方案,先试一下,看有没有效果。
全栈程序员站长
2022/10/02
2630
Android应用ANR分析
在Android中,程序的响应性是由Activity Manager与Window Manager系统服务来负责监控的,当系统检测到下面的条件之一时会显示ANR的对话框:
用户1205080
2019/03/18
1.2K0
ANR 原理与实战技巧
00 手机用用,就卡卡卡。莫名其妙的出现一堆程序无响应,欲哭无泪。这是为什么呢?因为你用的android手机。 android手机,为了让手机卡的不成样子,还想让用户知道,就发明了A
用户1263308
2018/02/02
2K0
ANR 原理与实战技巧
Android App 优化之ANR详解
ANR全名Application Not Responding, 也就是"应用无响应". 当操作在一段时间内系统无法处理时, 系统层面会弹出上图那样的ANR对话框。
用户1269200
2018/08/28
1.1K0
Android App 优化之ANR详解
Android ANR分析(trace文件的产生流程)
1.当一些带有超时机制的系统消息(如:Service的创建)判定超时后,会调用系统服务AMS接口,收集ANR相关信息并存档(data/anr/trace, data/system/dropbox)
北洋
2021/12/08
1.9K0
Android ANR分析(trace文件的产生流程)
如何识别C++编译以后的函数名
C/C++语言在编译以后,函数的名字会被编译器修改,改成编译器内部的名字,这个名字会在链接的时候用到。如果用backtrace之类的函数打印堆栈时,显示的就是被编译器修改过的名字,比如说_Z3foov 。 那么这个函数真实的名字是什么呢?
上善若水.夏
2018/09/28
2.7K0
如何分析ANR问题
上一篇介绍了ANR问题的相关知识,本篇介绍如何分析ANR问题。下面链接是我之前分析的一个ANR问题实例,实战与理论结合更容易理解。 https://blog.csdn.net/qq_43804080/article/details/99978439
用户7557625
2020/07/15
2.2K0
如何分析ANR问题
Android Handler机制1之Thread
每一个进程都有自己的独立的一块内存空间、一组资源系统。其内部数据和状态都是完全独立的。进程的优点是提高CPU的运行效率,在同一个时间内执行多个程序,即并发执行。但是从严格上将,也不是绝对的同一时刻执行多个程序,只不过CPU在执行时通过时间片等调度算法不同进程告诉切换。
隔壁老李头
2018/08/30
8220
Android Handler机制1之Thread
关于Signal Catcher线程中对线程的理解
首先简述下Signal Catcher,Signal Catcher线程接受到kernel系统底层的消息进行dump当前虚拟机的信息并且设置每个线程的标志位(check_point)和请求线程状态为挂起,当线程运行过程中进行上下文切换时会检查该标记。等到线程都挂起后,开始遍历Dump每个线程的堆栈和线程数据后再唤醒线程。关于ANR的更多内容在我的其他博客中进行查阅~~.
北洋
2021/12/08
6470
都知道避免ANR,但该如何分析,定位,解决?
链接:https://www.jianshu.com/p/cfa9ed42e379
陈宇明
2020/12/16
4.5K0
都知道避免ANR,但该如何分析,定位,解决?
相关推荐
干货:ANR日志分析全面解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档