6

gprofによって生成される出力からいくつかの関数を除外したいと思います。つまり、実行中に各関数が費やした時間の割合を計算するときに、それらを含めたくありません。一箇所で読んだ-Eオプションが使えます。

ただし、 gprof -E function_to_be_exluded my_program_nameを使用していますが、何も起こりません。マニュアルには減価償却が記載されているため、代わりにsymspecsを使用する必要があります。しかし、私はsymspecsでそれを達成する方法を見つけようとして、30分も無駄にしましたが、運がありませんでした。誰でも親切にこれで私を助けることができます。

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

1つのレポートから機能を除外する必要があるが、他のレポートから機能を除外しない場合は、使用-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_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]
    -----------------------------------------------
    
于 2014-09-04T18:38:29.810 に答える
2

私があなたが何を求めているのか誤解していない限り...

gprof a.out --no-time = function_name

私のために働きます。

于 2011-07-08T12:40:08.573 に答える