2016-09-30 20 views
4

gprofには、監視対象アプリケーションによって実行時にプロファイリングを有効または無効にするAPIがあるのだろうかと思います。私はコードの特定の部分のプロファイリングを無効にし、興味のあるものに焦点を当てることに興味を持っています。つまり、これを避ける方法はありますか?計装オプションを参照GCCのウェブサイトから実行時にgprofを有効または無効にしますか?

int main (void) 
{ 

    // disable gprof ? 
    uninteresting_routine(); 
    // enable gprof ? 

    interesting_routine(); 
} 

このlinkは、この機能への参照が含まれていないようです。

答えて

2

いくつかのシステムで動作する、文書化されていない隠された方法があります(glibcといくつかのBSDのすべてではないにしても少なくともいくつかのバージョンで動作します)。

$ cat foo.c 
extern void moncontrol(int); 

static void 
foo(void) 
{ 
} 

static void 
bar(void) 
{ 
} 

int 
main(int argc, char **argv) 
{ 
    moncontrol(0); 
    foo(); 
    moncontrol(1); 
    bar(); 
    return 0; 
} 
$ cc -o foo -pg foo.c && ./foo 
$ gprof foo | egrep 'foo|bar' 
    0.00  0.00  0.00  1  0.00  0.00 bar 
[1]  0.0 0.00 0.00  1   bar [1] 
    [1] bar 

Glibcには、この機能のプロトタイプまたはマニュアルページはありませんが、存在します。

+0

ありがとうございます!また、インテル®コンパイラーでも動作します。単に好奇心が、あなたはこの情報をどこで入手したのか覚えていますか? – Harald

+0

@Haraldカーネルのコードを一度プロファイリングして、私たちのlibcが何をしたかを調べました。私は10年前にこれをlinuxで必要としたときにチェックし、linuxは同じことを実装しました。 – Art

+0

@ハラルドbtw。これは、コンパイラがlibcが提供するフックを使用するだけなので、コンパイラにはまったく依存してはいけません。 – Art

関連する問題