4

私は、特定の入力が与えられたさまざまなLinuxプログラム(Cで記述)で呼び出される関数を見つける必要があるプロジェクトに取り組んでいます。私の現在のアプローチは、-pg(プロファイリングオプション)を使用してプログラムをコンパイルして実行し、gprofの出力を処理することによって呼び出される関数を見つけることです。少なくとも1回呼び出された関数のみが出力ファイルに表示されます。

明らかな問題は、1つのプロセスだけがgprof出力ファイルに書き込めることです。プログラムが複数のプロセスをフォークする場合、他のプロセスからプロファイリング出力を取得しません。

gprofに各プロセスの出力ファイル(おそらくpidでラベル付けされている)を生成させる方法はありますか?マニュアルでは、各プロセスを別のディレクトリに変更することを提案していますが、これを行うためにソースコードを変更したくありません。Linux用の別のツールが役立ちますか?

4

2 に答える 2

3

ここで彼らはtprof の使用を提案します:

valgrindを試しましたか?

http://www.network-theory.co.uk/docs/valgrind/valgrind_17.html

--child-silent-after-fork=<yes|no> [default: no] 

有効にすると、Valgrind は fork 呼び出しに起因する子プロセスのデバッグまたはログ出力を表示しません。これにより、子を作成するプロセスを処理するときに、出力の混乱を軽減できます (ただし、誤解を招きやすくなります)。--trace-children= と組み合わせると特に便利です。XML 出力を要求している場合 (--xml=yes) にも、このフラグを使用することを強くお勧めします。そうしないと、子と親からの XML が混同され、通常は役に立たなくなる可能性があるためです。

于 2009-04-28T03:23:27.230 に答える
2

GCov を見てみましょう: http://gcc.gnu.org/onlinedocs/gcc/Gcov.html

于 2009-04-28T03:25:30.813 に答える