-1

我目前正在做一个项目,旨在找出系统在 android UI 上的一系列用户交互背后做了什么。例如,如果用户单击 Facebook Messenger 中的发送按钮,则测量的此类操作的响应时间为 1.2 秒。我的目标是弄清楚 1.2 秒是由什么组成的。我的朋友建议我看看“Systrace”。

但是,当我在我的 HTC one M8 上尝试 systrace 时,我遇到了一些问题:首先,打开 /sys/kernel/debug/tracing/options/overwrite 时出错 - 没有这样的文件或目录。我通过在http://opensourceforu.com/2010/11/kernel-tracing-with-ftrace-part-1/和 mount -t debugfs none /sys/kernel/debug之后建立内核支持解决了这个问题。然后我可以找到跟踪目录。此外,我在 Ramdisk 中的 default.prop 文件中设置了 ro.debuggable=1 并将 boot.img 刻录到我的手机中。

现在又遇到一个问题:当我运行-python systrace.py --time=10 -o mynewtrace.html sched gfx view wm时,弹出如下错误(19):error truncating /sys/kernel/debug/tracing/set_ftrace_filter : 没有这样的设备 (19)。我不知道我为 systrace 建立内核支持的方式是否不正确或是否缺少任何东西。

有人可以帮我解决这个问题吗?

4

1 回答 1

0

我想我已经找到了解决方案。我的环境是 Ubuntu 16.04 + HTC one M8。我将编写如下步骤:

  1. 打开终端并输入:$adb shell
  2. (1) $su(2) $mount -t debugfs none /sys/kernel/debug。现在您应该能够看到 /sys/kernel/debug/ 下的许多目录。(您可以 cd 进入 /sys/kernel/debug 来确认这一点)
  3. 新建一个终端并输入:dd if=/dev/block/platform/msm_sdcc.1/by-name/boot of=/sdcard/boot.img从您的设备生成 boot.img 内核映像。
  4. 使用 AndroidImageKitchen 解压 boot.img 并在 Ramdisk 文件夹中找到 default.prop。然后更改ro.debuggable=0ro.debuggable=1. 重新打包 boot.img 并将其闪存引导到您的设备。
  5. 设备启动后,在终端下输入:adb root 和消息,如:restarting adbd as root 可能会弹出。断开 USB 并重新连接。
  6. cd 到 systrace 文件夹,例如 ~/androidSDK/platform-tools/systrace 并使用: python systrace.py --time=10 -o mynewtrace.html sched gfx view wm
  7. 现在您可以生成自己的 systrace 文件。
于 2016-08-24T07:35:37.753 回答