Windowsに代わる優れたValgrindはありますか?


210

Linux専用であることがわかったとき、Cコーディング/デバッグを改善するためにValgrindを調査していました。OSをLinuxに移行することに他に必要も関心もないため、Windowsにも同等に優れたプログラムがあるかどうか疑問に思いました。


どのようなデバッグを行う予定ですか?Valgrindは非常に豊富なツールセットであり、以下の回答はあらゆる種類の方向を示しています。メモリリーク/割り当てのデバッグに重点を置きます。
jakobengblom2

1
たぶん、チェックする必要があるときに、Windows内の仮想Linuxマシンでコードをテストできます。仮想マシンと非仮想マシンの間で開発フォルダを共有できます。つまり、コードが十分に移植可能である場合です。
Liran Orevi

回答:


29

より良い商用ツール:


1
Purify:それが生き残った企業所有権の変更の数によって示されるように、由緒あるがまだ有用です!
ノーマンラムジー

2
Insure ++は、コードの計測に永遠にかかり、実行時にコードを実行するのに永遠にかかります。
Cジョンソン

117

jakobengblom2が指摘したように、valgrindには一連のツールがあります。あなたが話しているものに応じて、異なる窓の対応部品があります。ここでは、OSSまたは無料のツールについてのみ触れます。

1. MemCheck:

メモリ博士。これは比較的新しいツールで、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. Callgrind:

私のお気に入りはとても眠いです(http://www.codersnotes.com/sleepy)小さいですが、とても便利で使いやすいです。

さらに多くの機能が必要な場合は、AMD CodeAnalyst™Performance Analyzerは無料です。 。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

!windbgのheapコマンド:http : //hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html

4. Cachegrind:

上記のWindowsパフォーマンスツールには、一定レベルのL2キャッシュミスプロファイリング機能がありますが、Cachegrindほど優れていません。

5. DRD:

Windowsではまだ何も無料で強力なものは見つかりませんでしたが、わずかに近いWindowsの唯一の無料ツールは、AppVerifierの「ロック」チェッカーです。http: //msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx


2
ありますgperftools(旧称のGoogle PerfTools) 。これはvalgrindの置き換えではありませんが(実際には何ですか)、新しいmalloc、cpuプロファイラー、ヒーププロファイラー、チェッカーが含まれています。LinuxとWindows(Mingwを含む)やその他のuniceでのサポートとして一見の価値があります。
alexr

30

Valgrind + Wineを使用してWindowsアプリをデバッグしてみませんか?http://wiki.winehq.org/Wine_and_Valgrindを参照して ください

(Chromiumはこれを使用して、Windowsバージョンのメモリエラーをチェックします。build.chromium.orgを参照して、実験的またはメモリの滝を調べ、ワインを検索してください。)

メモリ博士もあります。dynamorio.org/ drmemory.htmlを参照してください


3
それは、Windowsアプリをデバッグするのではなく、Linuxアプリをデバッグするためです。
John Dibling 2010

33
Wineで再コンパイルする必要はありません。.exeと.pdbをLinuxボックスに転送するだけです。また、Linuxアプリをデバッグすることはありません。正確なWindowsアプリをデバッグしています。
Dan Kegel、2010

2
正確には、足りないクローンよりも本物を使うほうがいいです:D Love valgrind。
代替

11
いいね!Windowsから、linuxを実行する仮想マシンを実行し、ほぼvmのワインで、valgrind vmでソフトウェアを実行できます。WindowsがWindows
VM

15

Visual C ++の場合は、Visual Leak Detectorを試してください。使用すると、new呼び出しからのメモリリークが検出され、リークのソースコードに実際の行が返されました。最新のリリースはhttp://vld.codeplex.com/にあります。


それは私にはうまくいかないようです。私は基本的に、メモリを割り当てて解放しない以外は何もしない単純なプロジェクトを作成してみました。VLDはそれを検出しませんでした。:-|
Synetech 2010

@Synetech inc。私は私の問題を解決しVLDの最新バージョンを使用して... VS2010で同じ問題を抱えていた
relaxxx

14

使用しているWindowsの開発環境には、独自のツールが含まれている場合があります。たとえば、Visual Studioを使用すると、プログラムのメモリリーク検出して分離できます。


6
それはほとんど実用的ではありません。問題のある割り当てのファイル名/行番号をログに記録しますが、mallocを直接呼び出した場合にのみ有益です。new / deleteを使用すると、new.hが「問題のある」コードとして特定されてしまいます。
user9665 2009

3
それは私にとっては正しく機能し、新規/削除が使用されても正しい線を指します。
ロドリゴ

しかし、ライブラリ関数が割り当てれば機能しますか?たとえばstrdup。
Alex Budovski、2009

1
Valdrindはメモリリークの検出以外にも多くのことを行います。主にそれを使用して、解放されていない初期化されていないスタックとヒープメモリの使用を検出します。
ideasman42

1
@ user9665 Visual Leak Detector(vld.codeplex.com)は、最小限のソースコード変更で各メモリリークの完全なコールスタックを提供します。サイトの例を確認
KindDragon

14

私はいくつかのツールをリストしたいのですが、役に立つことを願っています

詳細については、この記事を読んでください

  1. 清める
  2. 境界チェッカー
  3. Coverity(基本的にはコードアナライザーですが、staticでメモリリークをキャッチします)
  4. グローコード
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. ヤム
  9. ヴァルグリンド
  10. mpatrol
  11. 保険++


12

Windowsのデバッグツールの一部であるPageheap.exeがあります。これは無料で、基本的にはカスタムメモリアロケータ/デアロケータです。

http://support.microsoft.com/kb/286470を参照してください


Pageheap / gflagsは、いくつかの厄介なヒープ破損問題の原因を突き止めるのに役立ちました。
the_mandrill

私が見つかりました。gflags+ gdb診断に役立つ(MinGWのから)。
Jarekczek 2012年


6

私は過去にCompuware DevPartner Studioを使用する機会がありましたが、それは本当に良かったですが、それはかなり高価です。より安価な解決策はGlowCodeかもしれませ。私は5.xバージョンで動作しましたが、デバッグする必要があるプロセスへの接続にいくつかの問題があるにもかかわらず、それは非常にうまくいきました。


はい、高価です。プロファイラーのピースを使用するだけで、1週末に返金されました。
EvilTeach 2009年



4

同様のツールのリストについては、ソフトウェアQAテストおよびテストツールのリソースページの「ソーステストツール」リンクを参照してください。

過去にプロファイリングにBoundsChecker、DevPartner Studio、Intel V-Tuneを使用しました。私はV-Tuneが一番気に入りました。さまざまなIntelチップセットをエミュレートでき、そのプラットフォーム用に最適化する方法のヒントを提供します。




3

ブーストテストライブラリは、メモリリークを検出できます。





2

Borland / CodeGear / Embarcadero C ++ Builderで開発している場合は、CodeGuardを使用できます。


2

ほぼすべてのプロファイラーにメモリリークのチェックが含まれ、メモリが割り当てられたときのスタックが表示されます。

Intels Parallel Inspectorをお勧めします。使い方は簡単で、再コンパイルは必要ありません。試用版は30日間実行されます。

GlowCodeAtromatedQAにもそのような機能が含まれています。彼らはすべて無料の試用版を提供しています。

ContrastのCompuware DevPartner(別名BoundsChecker)は、スローダウンされた「インストルメンテーション」の再コンパイルを必要とし、エラーのチェック時にアプリケーションの実行速度も低下します。また、BoundsCheckerは64ビットのevsrionsではまったく機能しません。そのツールをあきらめました。


2
私は間違いなくグローコードをお勧めします。私は過去にこれを使用して、自分のアプリによって呼び出されているdll内のメモリリークを見つけました。
ボブは

私の最後の職場でDevPartnerを使用しているときに重大な速度低下の不満がありました。彼らはそれがどれほど遅くなるのでそれを使うのを避けるためにあらゆることをします。
Calyth







1

私は、Insure ++を使用しました。これは、c ++のメモリリーク/破損、および初期化されていない変数、ポインターエラー、文字列など、他の多くのバグを見つけるのに優れています。あなたのコード..あなたは試用版のためにそれを試すことができます。



1

IBM PurifyトライアルにRuntimeCheckerトライアルを試すことができます。

無料の解決策は、Visual Studioで次のコードを使用することです。

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

これをすべてのcppファイルの先頭に書き込むだけです。これにより、デバッグの実行を停止したときにアプリケーションのメモリリークが検出され、出力ウィンドウに表示されます。メモリリーク行をダブルクリックすると、メモリが割り当てられ、解放されない行が強調表示されます。これはあなたを助けるかもしれません:http : //www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.