gprof
、またはなどのプロファイリング機能を備えた C/C++ ライブラリを探していcallgrind
ます。
callgrind
より正確には、KCacheGrind などのサードパーティ ツールに渡すために、その出力が発行されるものと同等であることを望みます。
アイデアは、このライブラリに基づいてアスペクトを設計し、それを私のチームで開発しているいくつかのアプリケーションにプラグインできるようにすることです.
gperftoolsのCPU プロファイラーは、または典型的な動的リンクを使用して、任意の実行可能ファイルにアタッチできます。callgrind 互換の形式でデータを出力できます。LD_PRELOAD
実行可能ファイルのプロファイルを作成したいとしますa.out
。でリンクすることから始め-lprofiler
ます。その後、CPUPROFILE
envで実行します。プロファイリング データが保存されるファイルの名前を指す変数。callgrind 形式のデータは、 を使用して取得できますpprof
。
CPUPROFILE=a.out.prof ./a.out
pprof --callgrind a.out a.out.prof
興味深いのは、CPUPROFILE
undefined を使用すると、実行可能ファイルが正常に動作するという事実です。その結果、このプロファイラーは、アプリケーションを再コンパイルまたは再リンクすることなく、簡単に有効にすることができます。
なんらかの理由で実行可能ファイルのリンク方法を変更できない場合でもLD_PRELOAD
、次のように定義することでプロファイリングできます。
LD_PRELOAD=/path/to/libprofiler.so CPUPROFILE=a.out.prof ./a.out