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