[Python解析systrace.html]chrome打开systrace分析,图形显示时间点与文本时间点一一对应,方便debug使用

本文介绍了一款Python脚本,用于解析systrace文件,帮助快速定位任务在文件中的具体位置,通过修正时间戳和使用chrome://tracing进行对比,提高了问题排查效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、编写这个脚本的理由:
抓取systrace之后,需要使用chrome在网站chrome://tracing/解析出来,但是很多时候,我们发现问题之后,需要vim systrace文件定位到具体位置。这时候问题来了,不容易查找这个task到底在文件的哪个位置。这个脚本的目的的就是解决此问题。

二、使用方式
在systrace上面作为零点判断的依据是irq、ipi或者task。目前抓取的systrace没有看到例外的。所以Python脚本里面使用上面三个之一作为零点的依据,即谁出现的最早谁就是零点。

python SystraceAnalysis.py -i systrace.html -o trace.txt -d delta_value
说明:
systrace.html是实际抓取的systrace
trace.txt:是时间戳修正的trace文件
delta_value:是chrome打开systrace.html之后手动查找的在浏览器上面看到的第一个ipi/irq/task的位置,delta_value数值单位为us,如果碰到其他单位,请自动转换。如1.3ms,则delta_value=1300
如下所示:
在这里插入图片描述

分三种情况来解析

  1. trace中第一次出现irq_handler_entry,则作为零点,delta value就是此irq在chrome显示的相对零点的数值,如上图所示为216
  2. trace中第一次出现ipi_raise,上面类似
  3. 在user版本中,不能使用irq event抓取systrace,所以systrace中不存在irq和ipi信息,那么这种就以sched_wakeup && sched_switch并行出现作为相对零点。如下图所以:
    在这里插入图片描述
    那么执行如下命令解析如下:
    python SystraceAnalysis.py -i 0703-3.html -o 0703-3-1.html -d 16
    示例在最后

三、解析之后如何使用
chrome打开原始systrace.html文件
找到delta_value数值
执行Python脚本:python SystraceAnalysis.py -i systrace.html -o trace.txt -d delta_value
vim 打开trace.txt,就可以对应到systrace.html上的各类信息了。

Python源码如下:https://github.com/samarxie/systrace/blob/master/SystraceAnalysis.py

<think>好的,我现在需要帮用户解答关于如何使用ADB抓取systrace的开始和结束命令的问题。首先,我得回想一下用户之前的问题,他之前问了关于Uninterruptible Sleep状态,现在转向了实际操作,如何抓取systrace。这说明用户可能在进行性能分析,遇到了线程阻塞的问题,现在需要实际操作的指导。 用户可能是一名Android开发者,或者正在做性能优化相关工作。他们可能已经知道systrace的基本用途,但需要具体的命令行步骤。我需要确保给出的命令准确,并且涵盖不同的Android版本,因为不同版本可能有不同的方法。 首先,我应该区分Android 9(API 28)及以上的版本和更早的版本,因为从Android 9开始,systrace被Perfetto取代,但可能仍支持旧命令。用户可能需要同时知道新旧方法,以确保兼容性。 接下来,我需要详细写出开始和结束的命令,包括参数说明,比如时间、输出文件、要跟踪的类别等。同时,要提醒用户关于注意事项,比如需要启用USB调试,是否有root权限等。此外,可能还需要提到如何自动结束抓取,或者手动停止的方法,比如Ctrl+C。 还要考虑用户可能遇到的常见问题,例如命令无法执行,或者输出文件找不到,这时候需要给出排查建议,比如检查Python环境,ADB是否正确连接等。另外,用户可能需要知道如何查看生成的文件,推荐使用Perfetto UI,并提供链接。 最后,要确保语言简洁明了,步骤清晰,避免使用过于专业的术语,但也要准确无误。可能用户是第一次使用systrace,所以需要给出完整的命令示例,包括参数的具体值,比如时间设为5秒,输出文件名等。 总结一下,我需要分步骤介绍命令,涵盖不同Android版本,解释每个参数的作用,给出示例,注意事项,以及后续分析工具的使用方法。这样用户能够按照步骤操作,解决实际问题,同时避免常见错误。</think>以下是使用 **ADB 抓取 systrace** 的核心命令和操作步骤,适用于 Android 性能分析场景: --- ### **1. 基础命令(Android 9 及以上)** 从 Android 9(API 28)开始,官方推荐使用 **`perfetto`** 替代传统 `systrace`,但仍兼容旧命令。 #### **(1) 启动抓取** ```bash # 通用命令格式 python systrace.py [options] [categories] # 示例:抓取 10 秒,跟踪 CPU、图形、磁盘 I/O 等核心事件 python systrace.py -t 10 -o output.html sched freq idle am wm gfx view binder_driver hal dalvik disk input ``` #### **(2) 手动控制开始/结束(需 root 权限)** ```bash # 开始抓取(后台运行) adb shell "atrace --async_start -b 16384 gfx input view webview wm am sm audio video camera hal res dalvik rs bionic power pm ss database network adb sched irq freq idle sync disk workq memreclaim regulators" # 结束抓取并导出结果 adb shell "atrace --async_stop" > trace.txt adb pull /sys/kernel/debug/tracing/trace trace.raw ``` --- ### **2. Perfetto 命令(Android 10+ 推荐)** Android 10 及以上默认集成 **Perfetto**,提供更强大的跟踪功能: #### **(1) 基础抓取** ```bash # 通过 ADB 触发 Perfetto 抓取(默认 10 秒) adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 10s sched freq idle am wm gfx input disk ``` #### **(2) 自定义配置** ```bash # 生成配置文件(JSON 格式),定义跟踪参数 echo ' buffers: { size_kb: 100000 } data_sources: { config { name: "linux.process_stats" } } duration_ms: 5000 ' > config.pbtx # 执行抓取 adb shell perfetto -c /data/local/tmp/config.pbtx -o /data/local/tmp/trace.perfetto-trace adb pull /data/local/tmp/trace.perfetto-trace ``` --- ### **3. 关键参数说明** | 参数 | 作用 | |------|------| | `-t N` | 抓取时长(秒) | | `-o FILE` | 输出文件名(默认 `trace.html`) | | `-b SIZE` | 缓冲区大小(KB,防溢出) | | `categories` | 指定跟踪的事件类别(如 `gfx` 图形、`input` 触控) | --- ### **4. 注意事项** 1. **环境依赖**: - 确保 Python 2.7 环境(传统 systrace 需要)和 `systrace.py` 文件(位于 Android SDK 的 `platform-tools/systrace` 目录)。 - Perfetto 无需额外配置,但需 ADB 版本 ≥ 1.0.40。 2. **权限要求**: - 部分内核事件(如 `binder_driver`)需要 **root 权限** 或 **eng 模式**。 - 普通应用进程跟踪可使用 `debug` 权限。 3. **文件导出**: - 使用 `adb pull` 导出文件时,注意目标路径是否可读。 - Perfetto 文件需通过 **[Perfetto UI](https://ui.perfetto.dev)** 解析。 --- ### **5. 结果分析** - **传统 systrace**:用 Chrome 浏览器打开 `.html` 文件(访问 `chrome://tracing`)。 - **Perfetto**:上传 `.perfetto-trace` 文件到 **[Perfetto UI](https://ui.perfetto.dev)**。 --- 通过上述命令,可灵活抓取 Android 系统的运行时行为,定位性能瓶颈(如 `Uninterruptible Sleep` 状态)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值