2012-11-27 12 views
10

CentOSリポジトリの標準gcc 4.4パッケージを使用して、64ビットCentOS 5.8で静的にリンクされた64ビットC++アプリケーションを開発しています。それは私が予想したより多くのメモリを使用しているように見えるので、メモリ使用量をプロファイリングするためにmassifを使用しようとしました。私は、デバッグ情報付きでコンパイルして、MYPROGが存在するディレクトリからValgrindのmassifツールは私のアプリケーションをプロファイルしません

valgrindの--tool =山塊./MyProg

を実行しました。次のmassif.out.XXXXの例以外の結果は生成されません。

desc: (none) 
cmd: ./MyProg 
time_unit: i 
#----------- 
snapshot=0 
#----------- 
time=0 
mem_heap_B=0 
mem_heap_extra_B=0 
mem_stacks_B=0 
heap_tree=empty 

これはファイルの内容全体と私のプログラムが何分間も実行できることに注意してください。

私はvalgrindとmassifにさまざまなオプションを試してみました。 MyProgへの絶対パスを使ってみました。私はvalgrind(3.8.1)の最新の安定版をダウンロードしてコンパイルして実行しましたが(CentOSは3.5.0を使用しているので)、同じ結果が得られました。健全性チェックとしてIは

-l

valgrindの--tool =山地LSを実行し、予想されるように、非ゼロのメモリ使用量との複数のスナップショットを生成しました。

私は考えることのできるキーワードの組み合わせを使用してオンラインで検索しようとしましたが、同様の問題は見つかりませんでした。

便利な情報がある場合は、valgrindのデフォルトmemcheckツールを使用してアプリケーションを正常にプロファイルできます。

誰も私のアプリケーションのプロファイリングに失敗する理由を知っていますか?

+0

プログラムは静的にリンクされていますか? 'ldd ./MyProg'を実行すると、共有ライブラリのリストが表示されるのですか、それとも何も印刷されませんか? –

+0

静的にリンクされています。私はこれを明確にするために質問を編集しました。 – Tyson

答えて

9

アプリケーションが静的にリンクされている場合は、valgrindを使用して解析することはできません。 Valgrindは、プログラムに割り当て関数の独自のバージョンを提供することによって動作します。これは動的ルックアップをオーバーライドすることで実現します。

標準ライブラリ(libcとlibstdC++)に動的にリンクすることができれば、おそらくあなたが探しているメモリ解析を実行できるはずです。

セカンドValgrind FAQ:

から、あなたのプログラムが静的にリンクされている場合、彼らはmallocなどの特定の機能を、交換することができなくなりますので、ほとんどのValgrindツールは、彼らと、同様に動作しません。自分のバージョン。

+0

ありがとうございます。私はFAQのその部分を逃した。部分的なダイナミックリンクに変更した後、私はプロファイルを取得することができます。 – Tyson

+0

valgrind-usersメーリングリストの[conversation](http://thread.gmane.org/gmane.comp.debugging.valgrind/12653)に基づいて、valgrindはバージョン3.8.1の静的リンクアプリケーションを分析できるはずですに。メーリングリストで要求されたとおり、私は[バグ](https://bugs.kde.org/show_bug.cgi?id=311093)を提出しました。 – Tyson

関連する問題