それは、あなたがどれだけ慣習的になりたいかによって異なります。
gprof
あなたが言及したことの両方を行います。これについていくつかのコメントがあります。
プロファイリングとは測定に関するものだという考え方があります。何を測定しますか?まあ、何でも - 測定するだけです。これに加えて、取得したいのは何が起こっているかの「全体像」であるという考えがあります。この学校は、主に「遅い関数」を見つけようとすることに目を向けていますが、それが何を意味するのかを明確に定義することなく、そこを見て最適化するように指示しています。
別の学校は、あなたが本当にデバッグしていると言っています。特定の種類のバグを正確に特定したいとします。つまり、プログラムを正しくしないバグではなく、時間がかかりすぎるバグです。これらは大局的なものではありません。これらは、必要以上に時間がかかる何かが発生しているコード内の非常に正確なポイントです。正確にどれだけ多くするかは重要ではありません。重要なのは、固定できるように配置されていることです。この観点では、プロファイリングのオーバーヘッドは無関係であり、測定の精度も重要ではありません。測定の目的は、どれだけの時間が節約されたかを確認することです。
私が思うに、両方の陣営にまたがるプロファイラーの 1 つはZoomです。これは、壁時計の時間でコール スタックをサンプリングし、ライン/命令レベルでスタック上の時間の割合を提示するためです。他のプロファイラーもこれを行いますが、ほとんどは行いません。
私は 2 番目の学校に通っていますが、これで達成できることの例を次に示します。
ここでは、問題のより簡単な説明を示します。