从gprof结果中排除函数

时间:2011-07-08 10:25:46

标签: c linux gprof

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

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

3 个答案:

答案 0 :(得分: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明确排除)

答案 1 :(得分:3)

据该男子说:

  • 要显示平面配置文件并从中排除功能,您需要使用-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]
    -----------------------------------------------
    

答案 2 :(得分:2)

除非我误解了你的要求......

gprof a.out --no-time = function_name

适合我。