我真的很喜欢使用火焰图进行分析的想法,因为它有助于消除不需要的函数调用。但是有一个问题,它要求分析器在每次收集样本时都进行完整的堆栈转储。这可以通过 DTrace 或 SystemTap 很容易地完成,但我需要能够在运行 ubuntu 的 ARM 设备上执行此操作(这消除了 DTrace)。我也想在不重新编译内核(消除 SystemTap)的情况下做到这一点。
是否有可能让 Valgrind/Callgrind 或 OProfile(或其他一些可以在 Ubuntu 的 ARM 设备上运行的分析工具)输出类似于:
dtrace -n 'profile-1001 /pid == 12345 && arg1/ { @[ustack()] = count(); }