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

在C程序中debugging慢函数(由gcc构build),第1张

概述在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。

总结

以上是内存溢出为你收集整理的在C程序中debugging慢函数(由gcc构build)全部内容,希望文章能够帮你解决在C程序中debugging慢函数(由gcc构build)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1221674.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存