我正在尝试使用 gprof 分析一些使用 g++ 编译的 c++ 代码,包括选项 -pg。然而,尽管该程序在我的计算机上运行需要 10-15 分钟(CPU 已最大化),但 gprof 生成的表的时间百分比、累积秒数和自秒列完全是 0.00 秒!调用列包含看起来正确的数据,例如对基本函数的超过 150,000 次调用。以下是收集到的数据示例:
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
0.00 0.00 0.00 156012 0.00 0.00 perm::operator[](int) const
0.00 0.00 0.00 153476 0.00 0.00 perm::perm(void)
该程序不使用字符串,唯一的 #include 是 iostream(仅用于输出最终答案),因此它不会因为字符串查找和比较或其他类似的慢速外部函数而变慢:unable to accumulate time using gprof - the gnu profiler
程序本身退出正常,我没有理由相信配置文件数据没有被正确写入(正如这里建议的那样: gprof reports no time accumulated )
由于这一切都在 Windows 7 中完成,因此无法尝试使用 Shark 或 Valgrind。
是否有理由记录每个函数花费的 0.00 秒?
最佳答案
gprof 不计算任何阻塞时间,如 I/O 或其他东西。此外,在任何在子函数中完成其所有工作的例程中,“自我时间”通常都非常小,就像您主要在 DLL 中使用 gprof 看不到它的库一样。 Check this answer.
关于c++ - gprof 的时间采样问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3603249/