1

我的应用程序使用后台线程来初始化主线程加载英雄活动所需的一些东西。它有一堆用于同步的锁。我正在寻找一种快速的方法来绘制可能的堆栈跟踪,其中主线程在应用程序启动期间等待后台线程持有的锁。我检查了线程状态监视器。我该如何调试?是什么原因造成的?但这是在谈论点到时间线程状态,因为我正在寻找在启动期间发生的所有此类事件,但不知道这些事件发生在哪里。

我确实看到可以通过手动检查启动 android 配置文件跟踪并查看各种线程堆栈以找到这些事件来找到此信息,但是有很多数据需要处理。如果该工具可以显示主线程等待其他线程持有的锁的次数、花费的总时间以及它持有这些锁的位置,那就太好了。

Q1) 我们知道 Android profiler 是否可以显示这个吗?我检查了https://developer.android.com/studio/profile/cpu-profiler但找不到它。

Q2)如果没有,是否有任何其他工具可以解析分析器导出的跟踪并打印此信息?

Q3)如果没有,您对如何读取导出的跟踪文件有任何指示吗?它似乎是二进制的。我正在通过https://github.com/JetBrains/android弄清楚。现在似乎正在使用 perfetto,但我还没有编写任何实用程序来读取该数据。

更新:我发现 CPU 分析/Systrace 选项显示我的主线程确实保持空闲或等待某些资源,但是它没有关于它等待什么或空闲一段时间后运行哪些方法的信息。关于如何结合 java 方法跟踪和 sys 跟踪视图的任何指针?

在此处输入图像描述

4

1 回答 1

0

Perfetto能够显示此信息。在给定线程的时间线上查找“锁定争用”消息。它还打印线程获得该锁的数据。

Prefetto 显示锁争用

于 2021-08-11T15:57:08.753 回答