2009-07-22 19 views
65

LinuxでC++を実行しているコードをプロファイルする必要があります。皆さんはいくつかのプロファイラをお勧めしますか?Linux上でC++用の使いやすいプロファイラは何ですか?

+1

LinuxおよびC++タグを追加する必要があります。あなたはおそらくより良い応答と意見の範囲を得るでしょう。 – Duck

+1

http://stackoverflow.com/questions/375913/what-c​​an-i-use-to-profile-c-code-in-linuxの複製のようです。 –

+0

例:likwid、LLTng、oprofile、valgrind、vtune、gprof、perf、gperftools、pTop – Shan

答えて

17

valgrindは、私がOprofileのファンだ周知のLinuxのプロファイラ

+0

valgrindはメモリリークどの機能が呼び出されているかを調べようとしています。 – shergill

+8

"callgrind"スイートツールを使用します。 – dfa

+1

Valgrindは単に動的ツールを構築するためのフレームワークです。 Valgrindを基盤にしたツールMemcheckと同義になっていますが、Callgrindはプロファイラでかなり優れています。 – Falaina

11

です。それはカーネルモジュールのインストールを含み、少しの学習曲線がありますが、それはかなり強力であり、シンボルをデバッグせずに最適化されたプログラム/プログラムでうまく動作します。

Vtuneは、インテル製の非常に強力なプロファイラです。私は、Linux版が非商用ソフトウェアには無料であると信じています。

dfaが提案したValgrindツールセットもあります。 Callgrindはおそらくあなたが最も興味を持っているだろう.Calgrind(その特徴セットはCallgrindのサブセットである)とMassifも興味深いが、私は後者に関しては経験がない。

+0

oprofileのための+1、それは "簡単なツール"ではありません – dfa

+1

ハハ、本当です。私はおそらくそう簡単に音を立てるべきではありません:) VtuneやValgrindのツールとして「プログラムを実行する」のと同じくらい単純ではありませんが、かなり早く慣れることができます。 – Falaina

+0

oprofileは面白そうです - それはx86_64をサポートしていますか? – LiraNuna

2

gprofは、プロファイリングの標準gnuツールです。

4

Googleはまた、google-perftoolsの一部として素敵なプロファイラを持っています。これらはDebian/Ubuntuやその他のディストリビューションに含まれています。

5

KCacheGrindをご覧ください。これはvalgrindのグラフィカルフロントエンドであり、本当に使いやすいものです。

34

gprofを使用してください。

-pgフラグでコンパイルしてください(ただし、わかりませんが)最適化を有効にする必要があります)。gprofを使用して、実行ファイルが生成するgmon.outファイルを解析します。

例:

gcc -pg -o whatever whatever.c 

./whatever 

gprof whatever gmon.out 

同じことのG ++とcppを持ちます。

+20

最適化されていないコードのプロファイリングはちょっと意味がありますね。同様に、-pgで大幅に変更されたコードをプロファイリングすると、誤った箇所を最適化することが誤っていることがよくあります。 – federal

13

ズームRotateRight(http://www.rotateright.com)からは、私が使用してきたものです。それは機能のバタフライのビューを持っていますし、任意の機能をダブルクリックしてソースコードまたはASMコードにダイブすることができます。あなたのソースを見るためにデバッグ情報(-g)でビルドしますが、コードをビルドしてプロファイルする必要があります。

+0

ちょうどこのプログラムを与えた、それは本当に素晴らしいです!現在、私の好きなプロファイラはLinuxです。しかし、 '-fno-omit-frame-pointer'を使って効果的にプロファイリングするためにコードを構築する必要があることに言及する価値はあります。 –

+1

リンクが死んでいるようです。他の場所でどこに見つけられるかは誰にも分かりますか? –

2

Sysprofをご覧ください。あなたが流通している可能性が最も高いです。

アプリケーションがフレームポインタを使用してコンパイルされている場合、上記のプロファイラはすべて最適に機能することに注意してください。つまり、gccコマンドラインで-fno-omit-frame-pointerを使用する必要があります。

関連する問題