代码之家  ›  专栏  ›  技术社区  ›  Vi.

调试C程序中的慢函数(由gcc构建)

  •  2
  • Vi.  · 技术社区  · 14 年前

    有这样的来源:

    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;   }
                    }
    

    一、 e.关于执行该行平均需要多长时间(实时时钟时间,包括在系统调用中等待)以及执行多少次的信息。

    我应该用什么工具?

    3 回复  |  直到 14 年前
        1
  •  0
  •   Mike Dunlavey    14 年前

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


    我在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 是真的,所以整个过程持续了20秒。左边的数字是有这一行的样本(6667个样本)的百分比。例如,一个调用 func func5() 调用占用了总时间的80%。(也就是说,20秒中有16秒)所有其他的行都在堆栈上,相对而言,它们的百分比都是零。

    我会以不同的方式呈现这些信息,但这会让您了解堆栈采样可以告诉您什么。

        3
  •  0
  •   Eugene Smith    14 年前

    缩放或英特尔VTune。