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

标签 java multithreading stack-trace google-play-console android-anr-dialog

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

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

在google上搜索,浏览了很多帖子,google play android 文档,它只是提供了有关 ANR 含义的信息(主线程被阻止)以及如何处理/防止 ANR,但并没有完全了解如何从堆栈跟踪中提取含义,如何查看堆栈跟踪,到底是哪个线程导致了问题。

完整堆栈跟踪位于此处 https://del.dog/unafalycej.txt

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

ANR title screenshot

main thread screenshot

blocked thread screenshot

最佳答案

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

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

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

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

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

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

关于java - 了解 google play 给出的 ANR 堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59262366/

相关文章:

java - 为什么在 XSSFRow 中使用 copyRowFrom(...) 时出现 IllegalArgumentException?

java - 消费者和 worker 模式

java - 在 Java Web 爬虫中实现线程

java - Stackwalker 的帧数少于 stacktrace 的元素数

linux - 替代 gdb 从核心中提取堆栈跟踪? (Linux)

Java读取.txt文件到数组

java - Android fragment 按钮问题

java - 按字母顺序从数组中插入排序字符串

Python - 多线程/多处理

Haskell HasCallStack 意外行为