2

ホスト アプリケーションがあり、プラグインを作成しました。プラグインを共有オブジェクト (foo.so など) にコンパイルすると、ホスト アプリケーションは dlopen 経由でそれをロードします。この場合、私のホスト アプリケーションは llvm の opt ツールです (ただし、それは質問にとって重要ではないと思います)。

プロファイリングを有効にしてプラグインをコンパイルしたい (つまりg++ -pggprof)。ただし、これを行うと、プロファイル出力ファイル gmon.out が作成されません。gprof は誰かがセットアップ ルーチンなどを呼び出すことを期待しているのかもしれません。

さまざまな理由から、ホスト アプリを -pg で再コンパイルすることは避けたいと考えています。ホスト アプリケーション opt をプロファイリングせずに、共有オブジェクト foo.so をプロファイリングできるかどうか興味があります。

他のプロファイリング ツールも調べました。HP の qprof はこの状況を処理できるはずですが、共有オブジェクト内の関数の名前を解決できません (非常に素朴な方法で addr2line にフォールバックします)。

ありがとう、ニック

4

1 に答える 1

0

これを実行する理由は、(タイミング情報を取得するだけでなく)プラグインを最適化する方法を見つけるためだと思います。

デバッガーまたはIDEでホストアプリを実行できますか?IDEには一時停止ボタンがありますか、それともCtrl-Cまたはそのようなキーで中断できますか?

次に、この手法を使用して、コストのかかるコードをすばやく見つけることができます。プラグインが実行されているときにのみサンプルを取得するか、それができない場合は、プラグインで終了しないサンプルを無視してください。

gprofまたは同様のプロファイラーを機能させたとしても、がっかりする可能性があります

于 2010-02-19T15:03:31.457 に答える