当前位置: 代码迷 >> Android >> ANR的log怎么分析才能快速找到有关问题的原因
  详细解决方案

ANR的log怎么分析才能快速找到有关问题的原因

热度:54   发布时间:2016-05-01 12:33:45.0
ANR的log如何分析才能快速找到问题的原因?
本帖最后由 ameyume 于 2011-08-24 09:28:13 编辑 关于log分析,看过网上的一些分析,在工作中也有一些经验。但还是不够,尤其是ANR的log,看log原因的话,基本上都是
Reason: keyDispatchingTimedOut
但这个只是表面现象,怎么分析才能找到导致ANR的根本原因呢?
各位有什么经验和建议还请分享下。
多谢了!

下面是网上找到的一些log分析的文章:
[Android实例] 【Sundy系列】网上绝无仅有的Log分析教程及例子!
android ANR
http://blog.csdn.net/muojie/article/details/6138688


还有哪些log分析以及解决bug的介绍,还请大家分享下啊。
------最佳解决方案--------------------
Your activity took to long to say to the Android OS 'hey i'm still alive'! (This is what the UI thread does).

http://developer.android.com/guide/practices/design/responsiveness.html

Basically if you make the UI thread do some complex task it's too busy doing your task to tell the OS that it is still 'alive'.

http://developer.android.com/resources/articles/painless-threading.html

You should move your XML Parsing code to another thread, then use a callback to tell the UI thread you have finished and to do something with the result.

http://developer.android.com/resources/articles/timed-ui-updates.html


------其他解决方案--------------------
这个讨论的话题真好!!
就像文章中所总结的,ANR的分类:
1.应用程序错误
2.Java application Hang
3.Dalvik/ Core Libraries的错误
4.kernel错误
5.Modem的问题

各种ANR还需要具体情况具体分析,并没有一种通用的方法可以快速定位,唯一通用的办法就是logcat和dmesg了,这也是解决bug过程中必需的……

希望有更多人参与讨论,针对不同模块,分享经验。
------其他解决方案--------------------
我也人人工logcat的一员。。。。。。
------其他解决方案--------------------
sundy的log查看+人工跟踪
------其他解决方案--------------------
其实/data/anr/trace.txt这个堆栈还是很有用的,只要系统出现ANR一次,就会往堆栈的文件里面写进去一次,无论是app的ANR还是service的timeout,都会有记录,不过唯一的缺点就是他是java的堆栈,只能跟踪到java,JNI甚至到底层出的问题导致java出现ANR,这个是需要自己深度往下跟踪,这个trace只能起到切入点的作用了。最近靠trace.txt找到了开机有非常小的几率在开机动画的时候systemserver被kill的问题,就是在SurfaceFlinger的JNI里面出现的死锁导致systemServer的timeout,一点点经验,分享一下。
------其他解决方案--------------------
    我一般是ANR以后,用DDMS连上去,调试查看主线程在哪里死循环。。。
------其他解决方案--------------------
引用:
嘛,境界差上面的几位太多了,我惭愧的走了。。。


没什么啊 分享经验 共同进步  DDMS连上查看死在哪里 的确是基本思路呀 
------其他解决方案--------------------
DDMS + 人工追踪代码。。。飘过。。。调试方面还是个新手,正在寻求比较好的方法。。。
飘。。。啊。。。飘。。。
------其他解决方案--------------------
logcat while you use your application
------其他解决方案--------------------
人工追踪代码。。。飘过。。。
------其他解决方案--------------------
bugreport中一般都能够找到是死在哪个类哪个方法多少行.
------其他解决方案--------------------
根据log和dmesg大致确定问题的位置,然后从上层一直追下去。在可能出现问题的地方加入LOG调试,可以借助SDK TOOLS。
方法大致是这样,但是本人很菜,还没有什么具体的经验~
------其他解决方案--------------------
找份来啦呵呵
------其他解决方案--------------------
  相关解决方案