手机FTRACE抓取:关键事件追踪与trace.txt保存方法

需积分: 42 2 下载量 127 浏览量 更新于2024-09-07 收藏 2KB TXT 举报
FTRACE(Function Trace)是Linux内核中的一个强大的系统调用接口,用于实时跟踪和记录系统中的特定事件。在手机开发和调试过程中,它对于理解和优化硬件性能、分析系统行为以及故障排查具有重要作用。本文档指导如何通过ADB (Android Debug Bridge) 连接手机,对特定的系统活动进行抓取,以便收集系统级的运行时数据。 首先,你需要在手机上启用FTRACE。通过USB连接手机后,使用adbshell进入系统的kernel debug目录: ``` adb shell cd /sys/kernel/debug/tracing ``` 接下来,确保FTRACE已经关闭,通过清空`tracing_on`文件来实现: ``` echo 0 > /sys/kernel/debug/tracing/tracing_on ``` 然后,设置你需要监控的事件。在这个例子中,抓取了多个关键性能和电源管理相关的事件,包括CPU频率切换、调度器操作、内存延迟、总线更新、时钟管理、CPU频率控制等。通过向`set_event`文件写入相应的事件名称,如: - `power:cpu_idlepower:cpu_frequencypower:cpu_frequency_switch_startmsm_low_power` - `sched:sched_switch sched:sched_wakeups sched:sched_wakeup_newsched sched:sched_update_task_ravg` - `power:memlat_dev_update power:memlat_dev_meas msm_bus:bus_update_request` - `power:bw_hwmon_update power:bw_hwmon_meas` - `rpm:*` - `clk_set_rate clk:enable clk:disable` - `power:clock_set_rate power:clock_enable power:clock_disable msm_bus:bus_update_request` - `cpufreq_interactive:cpufreq_interactive_target cpufreq_interactive:cpufreq_interact` 每个事件名称之间使用`>>`符号分隔,这样系统就会在抓取过程中记录这些指定的事件。 执行完这些操作后,开始捕获trace,通常会生成一个名为`trace.txt`的文件,该文件会记录所有指定时间段内的系统调用和事件数据。你可以根据需要调整捕获时间,或者在捕获完成后手动停止trace。 分析`trace.txt`文件的内容,可以深入理解手机系统的运行情况,比如处理器性能变化、内存使用情况、电源管理策略等,这对于软件优化和硬件故障排查至关重要。同时,FTRACE的灵活配置允许开发者针对特定应用或场景定制追踪,提高诊断效率。

06-12 16:01:50.335 25052 25443 D MediaCodec-java: start --start 06-12 16:01:50.338 25052 25443 D MediaCodec-java: Current process == com.ktcp.video 06-12 16:01:50.339 25052 25443 I com.ktcp.video: Rejecting re-init on previously-failed class java.lang.Class<com.skydebug.ftrace.FtraceSys>: java.lang.UnsatisfiedLinkError: dlopen failed: library "libskytrace.so" not found 06-12 16:01:50.339 25052 25443 I com.ktcp.video: (Throwable with no stack trace) 06-12 16:01:50.340 25052 25443 W System.err: java.lang.NoClassDefFoundError: com.skydebug.ftrace.FtraceSys 06-12 16:01:50.340 25052 25443 W System.err: at android.media.MediaCodec.setSkyMediaStatus(MediaCodec.java:2023) 06-12 16:01:50.340 25052 25443 W System.err: at android.media.MediaCodec.start(MediaCodec.java:2331) 06-12 16:01:50.340 25052 25443 W System.err: at com.tencent.thumbplayer.core.codec.tmediacodec.codec.DirectCodecWrapper.start(DirectCodecWrapper.java:82) 06-12 16:01:50.340 25052 25443 W System.err: at com.tencent.thumbplayer.core.codec.tmediacodec.TMediaCodec.start(TMediaCodec.java:136) 06-12 16:01:50.340 25052 25443 W System.err: at com.tencent.thumbplayer.core.codec.decoder.TPBaseMediaCodecDecoder.initMediaCodecInternal(TPBaseMediaCodecDecoder.java:317) 06-12 16:01:50.340 25052 25443 W System.err: at com.tencent.thumbplayer.core.codec.decoder.TPBaseMediaCodecDecoder.startDecoder(TPBaseMediaCodecDecoder.java:349) 06-12 16:01:50.340 25052 25443 W System.err: at com.tencent.thumbplayer.core.codec.decoder.TPMediaCodecManager.initVideoMediaCodec(TPMediaCodecManager.java:112) 06-12 16:01:50.340 25052 25443 W System.err: Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library "libskytrace.so" not found 06-12 16:01:50.340 25052 25443 W System.err: at java.lang.Runtime.loadLibrary0(Runtime.java:1088) 06-12 16:01:50.340 25052 25443 W System.err: at java.lang.Runtime.loadLibrary0(Runtime.java:998) 06-12 16:01:50.340 25052 25443 W System.err: at java.lang.System.loadLibrary(System.java:1656) 06-12 16:01:50.340 25052 25443 W System.err: at com.skydebug.ftrace.FtraceSys.<clinit>(FtraceSys.java:25) 06-12 16:01:50.340 25052 25443 W System.err: at com.skydebug.ftrace.FtraceSys.PointWriteFile(FtraceSys.java:73) 06-12 16:01:50.340 25052 25443 W System.err: ... 7 more

2023-06-13 上传