3

私は次のようなプログラムを持っています

int main()
{
  char *ptr = malloc(2);
  free(ptr);
}

だから私はプログラム内で起こっているすべての関数呼び出しをシステムコールまで追跡したいだけです

お気に入り

malloc
   |____ libc( sme_fn)
           |
           |__sme_system_call

これを入手する方法を教えてください。

4

2 に答える 2

2

ご存じのとおり、「システム コール」には 2 つの種類があります。

  • オペレーティング システムを直接呼び出す ("open"、"close"、"fork"、"exec"、"exit" など)

  • プラットフォーム用の標準 C ランタイム関数 (「printf()」、「malloc()」、「free() など)」

前者は「strace」で表示できます。

gdbを使用して後者を表示 (少なくとも呼び出し) できます。

ソース コードから直接、完全な実装とすべての内部を確認できます。

最後に、"malloc()" に問題がある場合、" valgrind " は (いくつかあるうちの 1 つ) 考慮すべき非常に便利なツールです。

于 2012-06-12T20:20:52.150 に答える
1

gcc を使用している場合は、-pg でコンパイルしてから gprof コマンドを使用します。

または、Linux を使用している場合は、oprofileを使用して、再コンパイルせずに同様のことを行うことができます。

どちらのツールも、探しているコール グラフを提供するはずです。

于 2012-06-12T20:11:34.187 に答える