Android Systrace工具内部使用strace还是ftrace?

时间:2013-04-08 12:06:39

标签: android linux trace systrace

Systrace Android工具内部调用名为 atrace 的工具,该工具是 ftrace strace 的扩展名(Linux工具)。

如果我们通过模拟器控制台(ADB shell)连接到Android Jelly Bean,我们可以执行 strace 工具,但我们无法执行 ftrace 工具(命令未安装)。

通过互联网进行一些研究我发现 strace ftrace 的前身: http://crtags.blogspot.de/2012/04/dtrace-ftrace-ltrace-strace-so-many-to.html

展望Android源代码,我找到的最多“内部”参考是 Trace.h 文件: http://androidxref.com/4.1.1/xref/frameworks/native/include/utils/Trace.h

我认为这个文件然后被解析为本机Linux驱动程序。

但是,我仍然无法知道此实施驱动程序是属于 strace 还是 ftrace 。 “通常”,它应该是 ftrace ,因为它更新,但在这种情况下我不知道为什么我们无法从模拟器运行 ftrace 。相比之下, strace 完全可以从模拟器中获得。

那么,是否有人知道 Systrace Android工具是否使用非常低级别 strace ftrace

谢谢!

1 个答案:

答案 0 :(得分:6)

我按照此处的说明操作,与 ftrace 相关,: http://www.linuxforu.com/2010/11/kernel-tracing-with-ftrace-part-1/

一切都很完美。之前我无法执行 ftrace ,因为通过逻辑路径完成交互和检索数据。

要执行 ftrace ,在正确配置(许多步骤...)之后,在adb shell中:

root@android:# cat /sys/kernel/debug/tracing/trace > mytracefile.txt

atrace 使配置过程更加轻松,因此我们可以通过以下方式访问跟踪信息:

root@android:# atrace -s -w -t 100 > mytracefile.txt

另一方面,我在这里找到了有关执行 strace 的信息: http://www.hokstad.com/5-simple-ways-to-troubleshoot-using-strace

使用adb shell在我的环境中成功执行了所有指示的示例。

两种工具的互动和访问结果都非常不同。

现在我可以说 systrace Android工具基于 atrace ,后者又基于 ftrace

strace 也受支持,但用于其他目的,与 systrace 无关。

此致