如何从每个样本中的探查器获取完整的堆栈转储以用于火焰图?

Leo*_*Leo 3 linux profiling valgrind arm stack-trace

我非常喜欢Flame Graph的概念,因为它有助于消除不必要的函数调用.然而,有一个问题是它需要分析器在每次收集样本时执行完整的堆栈转储.这可以通过DTrace或SystemTap轻松完成,但我需要能够在运行ubuntu的ARM设备上执行此操作(这会消除DTrace).我还想在不重新编译内核的情况下执行此操作(这会消除Sys​​temTap).

是否有可能获得Valgrind/Callgrind或OProfile(或其他可以在Ubuntu中的ARM设备上运行的分析工具)输出类似于:
dtrace -n 'profile-1001 /pid == 12345 && arg1/ { @[ustack()] = count(); }

Bre*_*egg 7

尝试Linux perf_events(又名"perf"命令),它是主线Linux内核的一部分,通常通过linux-tools-common(或类似)软件包安装.我经常用它在Linux上创建火焰图.

我写了一些关于使用perf创建火焰图的说明:http://www.brendangregg.com/perf.html#FlameGraphs