2014-10-27 76 views
0

我希望看到函数及其所有后代使用perf报表所花费的时间比例。也就是说,假如我有类似在perf图中显示累计周期

void foo() 
{ 
    biz(); // 3,300 cycles 
    baz(); // 3,300 cycles 
    // ...  100 cycles 
} 

int main() 
{ 
    foo(); 
    bar(); // 3,300 cycles 
    return 0; 
} 

和功能barbazbiz了每3300个周期,foo本身只用了100次,那么我想看到这样一个图:

main 100% 
| 
+--- foo 67.0% (1.0%) 
| | 
| +--- biz 33.0% 
| +--- baz 33.0% 
| 
+--- bar 33.0% 

回答

0

你必须记录与-g选项的数据收集调试信息(从命令的帮助:“你调用图(堆栈链/回溯)记录”)。

然后,显示调用图如预期,添加选项--stdio,有一个平坦的,但分层输出,否则你将进入一个互动的ncurses模式。

+0

这是如何产生像上面这样的图形?所有'--stdio'都会转储调用堆栈。 – JRG 2014-10-28 16:57:27

+0

你是对的,我很抱歉,我玩过报告选项,但它似乎perf不能显示这种累积递减callgraph。它首先集中于符号排序,然后为每个符号提供调用链。 – amigadev 2014-11-04 09:11:28

+0

你应该看看:http://www.rotateright.com/zoom/ 他们提到在缩放3.3.2(最新版本)发行说明,他们已经删除的许可限制(移动到一个免费的软件产品)。 – amigadev 2014-11-04 09:25:59