Valgrind を調べて、C コーディング/デバッグが Linux 専用であることを発見したとき、OS を Linux に移行する必要や興味がないので、Windows 用の同様に優れたプログラムがあるかどうか疑問に思っていました。
38 に答える
jakobengblom2 が指摘したように、valgrind には一連のツールがあります。あなたが話しているものに応じて、さまざまなウィンドウカウンターパーツがあります。ここでは、OSS または無料のツールについてのみ言及します。
1. メモリチェック:
メモリ博士。これは比較的新しいツールで、Windows 7 で非常にうまく機能します。私のお気に入りの機能は、レポートで同じリークの割り当てスタックをグループ化することです。
http://code.google.com/p/drmemory/
UMDH ( http://support.microsoft.com/kb/268343 ) も使用しましたが、静かで便利でセットアップが簡単であることがわかりました。Win2000からWin7まで動作します。
AppVerifier は Windows ネイティブ コード開発者にとって必須のスイスナイフです。その「メモリ」チェッカーは同様の仕事をします http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx
2.コールグラインド:
私のお気に入りは verysleepy です ( http://www.codersnotes.com/sleepy ) 小さいですが、非常に便利で使いやすいです。
さらに機能が必要な場合は、AMD CodeAnalyst™ パフォーマンス アナライザーを無料で入手できます: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx
Windows パフォーマンス分析ツールは Microsoft から無料で提供されており、使いやすいものではありませんが、時間を費やす意思があれば仕事を成し遂げることができます。http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx ダウンロード: http://msdn.microsoft.com/en-us/performance /cc752957
3.山塊:
Windows 用の同様の (完全に一致するわけではない) 無料ツールは次のとおりです。
sysinternals の VMMap : http://technet.microsoft.com/en-us/sysinternals/dd535533
!windbg のヒープ コマンド: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html
4. キャッシュグラインド:
前述の Windows Performance Tools には、一定レベルの L2 キャッシュ ミス プロファイリング機能がありますが、Cachegrind ほど使いやすくはありません。
5.DRD:
Windows で無料で強力なものはまだ見つかっていませんが、Windows 用の唯一の無料ツールで、わずかに近いものは AppVerifier の「ロック」チェッカーです: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx
Visual C++ の場合は、Visual Leak Detectorを試してください。私が使ってみると、new
呼び出しからのメモリ リークを検出し、リークのソース コードの実際の行を返しました。最新のリリースはhttp://vld.codeplex.com/にあります。
使用しているWindowsの開発環境には、独自のツールが含まれている場合があります。たとえば、Visual Studioを使用すると、プログラムのメモリリークを検出して分離できます。
私はいくつかのツールをリストしたいと思います、希望は役に立つでしょう
詳細については、この記事をお読みください
- 清める
- 境界チェッカー
- コベリティ(基本的にはコードアナライザーですが、静的なメモリリークをキャッチします)
- グローコード
- dmalloc
- ccmalloc
- NJAMD
- YAMD
- Valgrind
- mpatrol
- Insure ++
Windows 用のデバッグ ツールの一部である Pageheap.exe があります。これは無料で、基本的にはカスタム メモリ アロケータ/デアロケータです。
http://support.microsoft.com/kb/286470を参照してください。
Visual Studio と組み合わせて、私は通常、Visual Leak Detectorを使用するか、単純に win32 API 呼び出しである _CrtDumpMemoryLeaks() を使用します。どちらも空想的ではありませんが、仕事を成し遂げます。
過去にCompuwareDevPartnerStudioを使用する機会があり、それは本当に良かったのですが、かなり高価です。より安価な解決策はGlowCodeである可能性があります。私は、5.xバージョンで作業しました。デバッグする必要のあるプロセスに接続する際にいくつかの問題がありましたが、非常にうまく機能しました。
私はSoftwareVerificationという会社のMemoryValidatorが大好きです。
Visual Studio は、メモリ リーク自体を検出するのに役立ちます。Microsoft Visual C++ のヒントとコツ-> 「メモリ リーク」セクションを参照してください。SOのこの投稿も参照してください
ただし、実際のトレースは Visual Studio の Team Edition でのみ可能です。
同様のツールのリストについては、ソフトウェアQAテストおよびテストツールのリソースページの「ソーステストツール」リンクを参照してください。
私は過去にプロファイリングにBoundsChecker、DevPartner Studio、IntelV-Tuneを使用しました。私はV-Tuneが一番好きでした。さまざまなIntelチップセットをエミュレートでき、そのプラットフォーム向けに最適化する方法のヒントが得られます。
Boost Testライブラリは、メモリリークを検出できます。
Jochen Kalmbach の Memory Leak Detectorは資格がありますか?
PS: 最新バージョンへの URL は、記事のコメント スレッドのどこかに埋め込まれています。
ピュリファイはどうですか?
LeakDiag、UMDH、App Verifier、DebugDiag はすべて、コードの堅牢性を向上させ、メモリ リークを見つけるのに役立つツールです。
メモリとスレッドの問題の両方を検出するのに役立つ Intel の Inspector XE 製品を試してください: http://software.intel.com/en-us/articles/intel-inspector-xe/
リスト用の別のメモリツール:MemoryValidator。
無料ではありませんが、PurifyやBoundscheckerほど高価ではありません。
おそらくCodeSnitchはあなたが求めているものでしょうか?http://www.entrek.com/codesnitch.html
私は今日このSFプロジェクトを見つけました:
http://sourceforge.net/p/valgrind4win/wiki/Home/
彼らはvalgrindをWindowsに移植しています。おそらく数年以内に、窓に信頼できるvalgrindができるようになるでしょう。
GCC と Micrsoft Visual C (まだ C++ ではない) を処理する Windows 用のメモリ セーフティ チェック ツールを完成させており、ベータ テスターを探しています。
編集 2011 年 6 月 12 日: もうベータ版ではなく、GCC および Microsoft Visual Studio C 向けの製品になりました。
Borland/CodeGear/Embarcadero C++ Builder で開発している場合は、CodeGuard を使用できます。
私がこれまでに使用した最高のツールはDevPartner BoundsCheckerです。これは無料ではありませんが、評価期間があります。
あなたがmingwを恐れていないなら、ここにいくつかのリンクがあります(MSVCで動作するものもあります)... http://betterlogic.com/roger/?p=1140
多かれ少なかれ、すべてのプロファイラーにはメモリ リークのチェックが含まれており、メモリが割り当てられたときのスタックが表示されます。
Intels Parallel Inspectorをお勧めします。使いやすく、再コンパイルは必要ありません。試用版は 30 日間実行されます。
GlowCodeとAtromatedQAにもそのような機能が含まれています。いずれも無料トライアルを提供しています。
Contrast の Compuware DevPartner (別名 BoundsChecker) では、低速の「インスツルメンテーション」再コンパイルが必要であり、エラーをチェックするときのアプリケーションの実行も遅くなります。また、BoundsChecker は 64 ビットの evsrions ではまったく機能しません。私たちはそのツールをあきらめました。
無料のツールDebugDiagは、メモリの検索とリークの処理に役立ちます。
DebugDiagを機能させるために、プログラムを拡張する必要はありません。
使用するのが最も簡単または最も直感的なプログラムではありませんが!あなたがそれを使用する方法についてのチュートリアルと指示のためにグーグルすることを確認してください。
「GameProgrammingGems8」の記事「ゲーム内メモリプロファイラーの設計と実装」を参照してください。
CD-ROMで提供されるソースコードである、オーバーヘッドの少ない半侵入型リアルタイムメモリプロファイラを実装する方法を示します。
ユーザー モード ダンプ ヒープ (UMDH) ユーティリティは、オペレーティング システムと連携して、特定のプロセスに対する Windows ヒープの割り当てを分析します。これは、Microsoft から無料で提供されている非常に優れたツールです。これは、「 Umdh.exeを使用してメモリ リークを見つける方法」というミニ チュートリアルです。
メモリ リークに関してMozillaが行っていることを読みたいと思うかもしれません。ツールボックスの 1 つのツールは、メモリ リーク検出器として使用される Hans Boehm ガベージ コレクターです。
この質問を確認してください: Windows に代わる適切な Valgrind はありますか? . valgrind の一般的な代用が求められますが、主にメモリ リーク検出器について説明し、競合状態の検出については説明しません。
確実に浄化!私はそれを使用していくつかの大規模なコード ベース (>3,000 kSLOC) を分析しましたが、それが優れていることがわかりました。
ウィキペディアでこのリストをご覧になることをお勧めします。
ところで、memwatchが便利であることがわかりました。ありがとうヨハン!
Clang は Address Sanitizer プラグイン (-faddress-sanitizer オプション) をサポートしており、Valgrind が検出できるほとんどのバグを検出できます (初期化されていないメモリ読み取りとメモリ リークの検出はまだサポートしていません)。Valgrind や他の同様のツールとの比較については、このページを参照してください。現在、公式の Windows への移植が進行中です。 Windows ASan への移植を参照してください。
数か月前に Windows で自分でビルドしようとしましたが、あきらめました。関連する質問を参照してください。もう一度試してみたい場合は、状況が改善されている可能性があります。
RuntimeCheckerトライアルまたはIBM Purifyトライアルを試すことができます。
無料の解決策は、Visual Studio で次のコードを使用することです。
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
これをすべての cpp ファイルの先頭に書くだけです。これにより、デバッグ実行を停止したときにアプリケーションのメモリ リークが検出され、それらが出力ウィンドウに一覧表示されます。メモリ リークの行をダブルクリックすると、メモリが割り当てられ、解放されていない行が強調表示されます。これはあなたを助けるかもしれません: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml
C++ のメモリ リークや破損、および初期化されていない変数、ポインタ エラー、文字列などの他の多くのバグを見つけるのに優れた仕事をする Insure++ を使用しました。また、視覚的な「コード カバレッジ」や実行時のメモリ使用量なども行います。あなたのコード..トレイルバージョンで試すことができます..
Parasoft Insure++ は常に信頼できます。
単なるアイデアですが、メモリ アロケータを実装して、malloc と free へのすべての呼び出しを追跡することもできます。ただし、これは一部のプロジェクトでは多すぎる場合があります。