了解 google play 给出的 ANR 堆栈跟踪
Posted
技术标签:
【中文标题】了解 google play 给出的 ANR 堆栈跟踪【英文标题】:Understanding ANR stack trace given by google play 【发布时间】:2020-04-03 08:27:54 【问题描述】:我们最近使用 cocos2d-js (3.17.1) 为 android 开发了一款游戏并获得了更多的 ANR,我想了解我们如何轻松理解所报告的堆栈跟踪。
我观察到有些行是粗体,有些是浅灰色,为什么会这样,每个线程都有一些状态,有些 ANR 有黄色警告,但没有得到导致问题的线程。
在 google 上搜索,浏览了很多帖子,google play android docs,它只是提供了关于 ANR 的含义(主线程被阻止)以及如何处理/防止 ANR 的信息,并没有完全得到如何从堆栈跟踪中提取含义,如何通过堆栈跟踪,究竟是哪个线程导致了问题。
完整的堆栈跟踪在这里 https://del.dog/unafalycej.txt
附上我们获得最多时间的 ANR 屏幕截图(主线程和阻塞线程)。
ANR title screenshot
main thread screenshot
blocked thread screenshot
【问题讨论】:
【参考方案1】:根据我的经验,ANR 是最难分析的,但下面提到的是我进行 RCA 的一些可能步骤。
继续查找特定操作,然后您会看到 ANR,查找其 API/方法/onClick
,尝试分析该代码。
查看这些特定方法的日志,中间是否有任何不必要的调用,如果可能,请尝试分析。
在应用程序遇到 ANR 后,android 将 a 存储在 /data/anr/traces.txt
。尝试提取此文件并开始分析它。寻找主线程,检查它的STATE
和stacktrace。有关跟踪文件的详细信息,请参阅this。
尝试识别具有大 jiffies 的线程。也可以查看他们的调用堆栈。
还有线程转储和systrace
之类的功能很有用。
【讨论】:
以上是关于了解 google play 给出的 ANR 堆栈跟踪的主要内容,如果未能解决你的问题,请参考以下文章
当 Google Play 开发者控制台收到崩溃或 ANR 时,是不是可以收到通知(例如电子邮件)?
Android - “连接到 Google Play”仍然给出错误代码 4?