使用 Traceview 检查跟踪日志

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 打开跟踪日志,请按以下步骤操作:

  1. 启动 Android Device Monitor
  2. 在 Android Device Monitor 中,依次选择 File > Open File
  3. 转到要检查的 .trace 文件。
  4. 点击 Open

注意:如果您尝试查看在启用 ProGuard 的情况下所编译(在发布模式下编译)应用的跟踪日志,则系统可能已对某些方法名称和成员名称进行了模糊处理。您可以使用 Proguard mapping.txt 文件找出未经模糊处理的原始名称。要详细了解此文件,请参阅 Proguard 文档。

注意:从命令行运行 traceview 的功能已被弃用。

Traceview 概览

打开跟踪日志后,Traceview 会使用以下两个窗格显示日志数据:

  • 时间轴窗格,说明每个线程何时进入和退出方法
  • 分析窗格,总结了每个线程在跟踪日志期间的执行情况

以下各部分进一步介绍了 Traceview 的输出窗格。

时间轴窗格

图 1 显示了时间轴窗格的特写。每个线程的执行情况都显示在各自的行中,并且已用时间往右是增加的。每种方法都以不同的颜色显示。第一行下面的细线显示所选方法的子级(从进入到退出)。

Traceview 时间轴窗格

图 1. Traceview 时间轴窗格。

分析窗格

如图 2 所示,分析窗格列出了跟踪日志期间执行的各个方法以及执行这些方法所用的时间。调用另一个方法的方法称为父级,父级调用的方法称为其子级。当您通过点击某个方法来选择该方法时,它会在两个单独的节点下同时显示其父级和子级。

对于每个方法(顶级节点),该表会显示其非独占时间和独占时间(以毫秒为单位)以及占总时间的百分比。 独占时间是执行方法自身代码所用的时间,而非独占时间则是执行方法自身代码所用时间与执行其子级代码所用时间之和。系统还会根据 CPU 时间和实际时间来报告用时信息。CPU 时间仅会考虑线程主动使用 CPU 的时间,而实际时间则提供从应用进入方法到退出该方法这整个过程的绝对用时信息,无论线程处于活动状态还是休眠状态。

对于分析窗格中的每个顶级节点,表中的 Calls + Rec, Calls/Total 列(图 2 中未显示)会报告对相应方法的调用次数和递归调用的次数。而对于父方法和子方法,此列会显示被调用方法为顶级节点中方法的子级或父级的调用次数。

Traceview 分析窗格。

图 2. Traceview 分析窗格。

Traceview 已知问题

TraceView 日志记录无法很好地处理线程,从而导致出现以下问题:

  • 如果线程在分析期间退出,则不会发出线程名称(在 Android 5.1 及更高版本中已解决此问题);
  • 虚拟机会重复使用线程 ID。如果在一个线程停止时另一线程开始,这两个线程可能会获得同一 ID。