Исключение функции из результатов gprof - PullRequest
6 голосов
/ 08 июля 2011

Я хочу исключить некоторые функции из вывода, сгенерированного gprof. Другими словами, я не хочу, чтобы они учитывались при расчете процента времени, затрачиваемого каждой функцией во время выполнения. Я прочитал в одном месте -E вариант может быть использован.

Однако я использую gprof -E function_to_be_exluded my_program_name , но ничего не происходит. В руководстве говорится, что оно устарело, и вы должны использовать symspecs . Однако я потратил впустую полчаса, пытаясь выяснить, как этого добиться с symspecs , но безуспешно. Любой может помочь мне в этом.

Ответы [ 3 ]

4 голосов
/ 08 июля 2011

Точно, 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 определенно исключено)

3 голосов
/ 04 сентября 2014

По словам мужчины:

  • для отображения плоского профиля и исключения функции из него необходимо использовать -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_a и func_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_a и func_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 голосов
/ 08 июля 2011

Если я не понял, что вы спрашиваете ...

gprof a.out --no-time = имя_функции

работает для меня.

...