6

我想从 gprof 生成的输出中排除一些函数。换句话说,我不希望在计算每个函数在执行期间花费的时间百分比时将它们包括在内。我在一处读到-E选项可以使用。

但是我正在使用gprof -E function_to_be_exluded my_program_name,但没​​有任何反应。手册说它已折旧,您应该改用symspecs。但是,我浪费了半个小时试图弄清楚如何使用symspecs来实现它,但没有运气。任何人都可以在这方面帮助我。

4

3 回答 3

4

确切地说, gprof -e -E 已被弃用并被具有参数的较新相关选项的使用所取代 - symspecs。所以尝试使用:

gprof --no-time=symspec 

The -n option causes "gprof", in its call graph analysis, not to propagate times for
symbols matching symspec.

e.g.

gprof --no-time=name_of_function_you_dont_want_to_profile.

将此与其他 gprof 选项一起使用(-E -e 绝对排除)

于 2011-07-08T12:33:20.047 回答
4

据该男子称:

  • 要显示平面配置文件并从中排除功能,您需要使用-P选项:

    gprof main gmon.out -Pfunction_name
    
  • 要显示调用图并从中排除函数,您需要使用-Q选项:

    gprof main gmon.out -Qfunction_name
    

此选项可以重复并同时使用:

gprof main gmon.out -Pfunction_name -Qfunction_name -Qother_function_name

如果您需要从一个报告中排除功能但不排除其他您需要使用-p-q选项的任何功能。

例子:

创建程序:

#include <stdio.h>
#include <stdlib.h>

void func_a () {printf ("%s ",__FUNCTION__);}
void func_b () {printf ("%s ",__FUNCTION__);}
void func_c () {printf ("%s ",__FUNCTION__);}

int main ()
{
    func_a ();
    func_b ();
    func_c ();
    return EXIT_SUCCESS;
}

编译它: gcc main.c -pg -o main

并启动:

$ ./main
func_a func_b func_c

生成配置文件报告:

  • 如果您只需要打印平面配置文件,则需要致电:

    $ gprof main gmon.out -b -p  
      %   cumulative   self              self     total             
     time   seconds   seconds    calls  Ts/call  Ts/call  name      
      0.00      0.00     0.00        1     0.00     0.00  func_a  
      0.00      0.00     0.00        1     0.00     0.00  func_b  
      0.00      0.00     0.00        1     0.00     0.00  func_c
    
  • 如果您需要打印不包括函数和完整调用图的平面配置文件func_afunc_c则需要调用:

    $ gprof main gmon.out -b -Pfunc_a -Pfunc_c -q
      %   cumulative   self              self     total           
     time   seconds   seconds    calls  Ts/call  Ts/call  name    
      0.00      0.00     0.00        1     0.00     0.00  func_b
    
    index % time    self  children    called     name
                    0.00    0.00       1/1           main [9]
    [1]      0.0    0.00    0.00       1         func_a [1]
    -----------------------------------------------
                    0.00    0.00       1/1           main [9]
    [2]      0.0    0.00    0.00       1         func_b [2]
    -----------------------------------------------
                    0.00    0.00       1/1           main [9]
    [3]      0.0    0.00    0.00       1         func_c [3]
    -----------------------------------------------
    
  • 如果您需要打印不包括函数的平面配置文件func_afunc_c调用图,则func_b需要调用:

    $ gprof main gmon.out -b -Pfunc_a -Pfunc_c -Qfunc_b
      %   cumulative   self              self     total           
     time   seconds   seconds    calls  Ts/call  Ts/call  name    
      0.00      0.00     0.00        1     0.00     0.00  func_b
    
    index % time    self  children    called     name
                    0.00    0.00       1/1           main [9]
    [1]      0.0    0.00    0.00       1         func_a [1]
    -----------------------------------------------
                    0.00    0.00       1/1           main [9]  
    [3]      0.0    0.00    0.00       1         func_c [3]
    -----------------------------------------------
    
于 2014-09-04T18:38:29.810 回答
2

除非我误解了你在问什么...

gprof a.out --no-time=function_name

为我工作。

于 2011-07-08T12:40:08.573 回答