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