Traceview 已弃用。如果您使用的是 Android Studio 3.2 或更高版本,则应改用 CPU Profiler 来检查使用 Debug
类对应用进行插桩后捕获的 .trace
文件,记录新的方法跟踪,保存 .trace
文件,以及检查应用的进程的实时 CPU 使用率。
Traceview 是一个用于以图形化方式呈现跟踪日志的工具。您可以通过使用 Debug
类对您的代码进行插桩来生成日志。这种跟踪方法非常精确,因为您可以精确指定要在代码中的哪个位置开始和停止记录跟踪数据。如果您尚未生成这些跟踪日志并将其从连接的设备保存到本地计算机,请转到使用插桩对应用进行插桩以生成跟踪日志。使用 Traceview 检查这些日志有助于您调试应用并分析其性能。
提示:您可以使用命令行工具 dmtracedump
来生成跟踪日志文件的图形化调用堆栈图。
如果您不需要查看使用 Debug
类对应用进行插桩后记录的跟踪日志,您可以使用 Android Studio 3.0 及更高版本中包含的CPU Profiler 来检查应用的线程并记录方法跟踪。
使用 Traceview 打开跟踪日志
要从 Android Studio 中使用 Traceview 打开跟踪日志,请按以下步骤操作:
- 启动 Android Device Monitor。
- 在 Android Device Monitor 中,选择 File > Open File。
- 导航到您要检查的
.trace
文件。 - 点击打开。
注意:如果您尝试查看已启用代码缩减的应用(例如发布 build)的跟踪日志,则某些方法和成员名称可能会被混淆。您可以使用 ProGuard mapping.txt
文件找出原始的未混淆名称。有关此文件的详细信息,请参阅解码混淆的堆栈轨迹。
注意:从命令行运行 traceview
已弃用。
Traceview 概览
打开跟踪日志后,Traceview 将使用以下两个窗格显示日志数据:
以下部分提供了有关 traceview 输出窗格的更多信息。
时间轴窗格
图 1 显示了时间轴窗格的特写。每个线程的执行情况显示在其自己的行中,时间向右增加。每个方法以不同的颜色显示。第一行下方的细线显示了所选方法的子项(从进入到退出)。
图 1. Traceview 时间轴窗格。
分析窗格
如图 2 所示,分析窗格提供了系统在跟踪日志期间执行的每个方法的列表,以及执行这些方法所花费的时间。调用另一个方法的方法称为 parent(父方法),父方法调用的方法称为其 children(子方法)。通过点击选择方法时,它会在两个单独的节点下显示其父方法和子方法。
对于每个方法(顶级节点),表中显示了其包含时间和独占时间(以毫秒为单位)以及占总时间的百分比。独占时间是执行方法自身代码所花费的时间,而包含时间是执行方法自身代码加上执行其子方法所花费的时间。计时信息还以 CPU 时间和实时的方式报告。CPU 时间仅考虑线程正在积极使用 CPU 的时间,而实时提供应用从进入方法到退出方法时的绝对计时信息,无论线程是处于活动状态还是休眠状态。
对于分析窗格中的每个顶级节点,表中的 Calls + Rec, Calls/Total 列(图 2 中未显示)报告了对该方法的调用次数以及递归调用的次数。或者,对于父方法和子方法,此列显示该方法作为顶级节点中的方法的子方法或父方法时的调用次数。
图 2. Traceview 分析窗格。
Traceview 已知问题
Traceview 日志记录对线程的处理不够完善,导致以下问题:
- 如果线程在分析期间退出,则不会发出线程名称(在 Android 5.1 及更高版本中已修复);
- VM 会重用线程 ID。如果一个线程停止,另一个线程启动,它们可能会获得相同的 ID。