微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C程序中debugging慢函数由gcc构build

有这样的来源:

void foo() { func1(); if(qqq) { func2(); }; func3(); func4(); for(...) { func5(); } }

我想获得这样的信息:

void foo() { 5 ms; 2 times; func1(); 0 ms; 2 times; if(qqq) { 0 ms; 0 times; func2(); 0 ms; 2 times; }; 20 ms; 2 times; func3(); 5 s ; 2 times; func4(); 0 ms; 60 times; for(...) { 30 ms; 60 times; func5(); 0 ms; 60 times; } }

即关于执行该行所花费的平均时间(实际时钟时间,包括在系统调用中等待)以及执行多less次的信息。

我应该使用什么工具?

如何在Linux上使用Vtune Analyzer API

Systemtap对性能的影响

为什么C ++和strace不同意open()系统调用正在进行多长时间?

linux dot实用程序(带有xhprof)

我该如何解释OProfile输出

我希望这个工具可以testing每个函数来测量它的运行时间,这个函数调用函数写入日志文件(或者在内存中计数,然后转储)使用。

gperfTools / pprof:虚线是什么意思?

-finstrument-functions不适用于dynamic加载的g ++共享对象(.so

测量Windows应用程序的UI响应

如何从窗口崩溃转储文件获取窗口句柄和焦点窗口的列表?

如何衡量multithreading应用程序中的caching性能

进行Zoom的试运行。 你不会失望的

PS不要期望仪器工作。 对于行级别或功能级别的信息,假设您并不是绝对需要精确的调用计数(与性能几乎没有关系),则时间堆栈采样器将交付商品。

补充:我在Windows上,所以我只是用LTProf运行你的代码输出如下所示:

void foo(){ 5 func1(); if(qqq){ 5 func2(); } 5 func3(); 5 func4(); // I made this 16,not 60,so the total time would be 20 sec. for(int i = 0; i < 16; i++){ 80 func5(); } }

每个func()都有一个Sleep(1000)而qqq是True,所以整个事情运行20秒。 左边的数字是样本(6667个样本)的百分比。 所以,例如,对func函数之一的单个调用使用1秒或总时间的5%。 所以你可以看到func5()被调用的行使用了总时间的80%。 (也就是说,20秒内有16次)。其他所有的线都比较少,相对而言,它们的百分比是零。

我会以不同的方式呈现信息,但这应该了解堆栈抽样可以告诉你什么。

gprof是GNU构建(gcc,g ++)程序的标准: http : //www.cs.utah.edu/dept/old/texinfo/as/gprof_toc.html

以下是输出结果: http : //www.cs.utah.edu/dept/old/texinfo/as/gprof.html#SEC5

无论是缩放还是英特尔VTune。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐