找出运行C ++函数所需的时间

时间:2015-07-23 13:36:54

标签: c++ linux performance runtime

我正在调试一个大型C ++项目(Linux环境),并且一个二进制文件似乎比我预期的运行时间更长。如何查看每个源文件中每个函数调用的时间细分,以便找到问题?

3 个答案:

答案 0 :(得分:3)

找到问题的另一种方法是获取功能时间的细分。

在调试器下运行它,并手动中断几次,每次检查调用堆栈。 如果你查看代码中调用堆栈的每个级别,就可以确切地看到为什么会花费这个时刻。

假设你有一个速度问题,修复后会节省一些时间,比如30%。 这意味着您检查的每个堆栈样本在问题期间至少有30%的可能性发生。 所以,扭转它,如果你看到它做了可以消除的事情,并且你在多个样本上看到它,你就找到了你的问题! (或至少其中一个)**

那是the random-pausing technique。 它会发现计时器会遇到的任何问题,以及他们赢得的问题。

**您可能需要考虑一下。如果你看到它在单个样本上做某事,那并不意味着什么。 即使代码只执行了一千个完全不同的事情,但没有一个占用大量时间,它必须停止某处。 但是如果你看到它做了什么,并且你在不止一个样本上看到它,并且你没有采取大量的样本,那么两次击中相同无关紧要的事物的可能性非常小。 所以它的概率很可能是显着的。 事实上,对其概率的合理猜测是您看到它的样本数除以样本总数。

答案 1 :(得分:2)

#include <iostream> 
#include <ctime>

int main() {
    std::clock_t start = std::clock();

    //code here

    double duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
    std::cout << duration << std::endl;
}

答案 2 :(得分:0)

您可以创建自己的计时器类。在每个块调用方法的开始处将计时器变量重置为零 并在代码块的末尾获取计时器。你可以这样做 在各种代码块中。一旦你确定了代码块 需要更多时间,你也可以有内部计时器..如果你想尝试一个标准工具,我建议使用gprof。 http://www.thegeekstuff.com/2012/08/gprof-tutorial/