了解 google play 给出的 ANR 堆栈跟踪

Hat*_*per 5 java multithreading stack-trace android-anr-dialog google-play-console

我们最近使用 cocos2d-js (3.17.1) 为 android 开发了一个游戏并获得更多的 ANR,我想了解我们如何轻松理解报告的堆栈跟踪。

我观察到有些线条是粗体的,有些线条是浅灰色的,为什么会这样,每个线程都有一些状态,有些 ANR 的警告为黄色,但没有得到哪个线程导致了问题。

在 google 上搜索,浏览了很多帖子,google play android docs,它只是提供了有关 ANR 含义的信息,(主线程被阻止)以及如何处理/防止 ANR,并不能完全了解我该怎么做从堆栈跟踪中提取含义,如何通过堆栈跟踪,究竟是哪个线程导致了问题。

完整的堆栈跟踪在这里 https://del.dog/unafalycej.txt

附上我们获得最多次数的 ANR 屏幕截图(主线程和阻塞线程)。

ANR 标题截图

主线程截图

阻塞线程截图

Man*_*war 2

根据我的经验,ANR 是最难分析的,但下面提到的是我进行 RCA 时可能采取的一些步骤。

  1. 继续寻找特定操作,然后看到 ANR,寻找其 API/method/ onClick,尝试分析该代码。

  2. 查看这些特定方法的日志,中间是否有任何不必要的调用,如果可能的话尝试进行分析。

  3. 应用程序遇到 ANR 后,Android 会将一个存储在/data/anr/traces.txt. 尝试拉取此文件并开始分析它。查找主线程,检查其STATE和堆栈跟踪。有关跟踪文件的详细信息,请参阅此内容。

  4. 尝试识别具有大 jiffies 的线程。还可以查看他们的调用堆栈。

  5. 还有线程转储和systrace类似的功能,这可能很有用。