33

人々が良い経験をしたメモリリーク検出器は何ですか?

これまでの回答をまとめると次のようになります。

Valgrind - 動的分析ツールを構築するための計測フレームワーク.

Electric Fence - GDB で動作するツール

Splint - アノテーション支援の軽量静的チェック

Glow Code - これは、C++、C#、または任意の .NET Framework でアプリケーションを開発する Windows および .NET プログラマー向けの完全なリアルタイム パフォーマンスおよびメモリ プロファイラーです。

このスタックオーバーフローの投稿も参照してください。

4

17 に答える 17

18

second the valgrind... and I'll add electric fence.

于 2008-09-10T05:01:09.223 に答える
11

Linux でのValgrindはかなり優れています。Windowsでこれを使用した経験はありません。

于 2008-09-10T04:50:10.967 に答える
3

gccのマッドフラップ!実際にチェックを実行可能ファイルにコンパイルします。追加するだけ

-fmudflap -lmudflap

gccフラグに。

于 2008-11-10T01:15:04.547 に答える
3

お金がある場合: IBM Rational Purifyは、C/C++ 向けの非常に強力な業界最強のメモリ リークおよびメモリ破損検出器です。Windows、Solaris、および Linux 用に存在します。Linux のみを使用していて安価なソリューションが必要な場合は、Valgrind を使用してください。

于 2008-09-25T21:37:19.147 に答える
2

Linuxでglibcを使用している場合は、組み込みのデバッグヒープコードも使用する価値があります。これを使用するには、-lmcheckとリンクするか、値1、2、または3 のMALLOC_CHECK_環境変数を定義(およびエクスポート)します。glibcのマニュアルに詳細が記載されています。

このモードは、ダブルフリーを検出するのに最も役立ちます。フリーを実行すると、割り当てられたメモリ領域外の書き込みが見つかることがよくあります。メモリリークが報告されているとは思いません。

于 2008-11-11T19:22:37.723 に答える
2

lint (very similar open-source tool called splint)

于 2008-09-10T04:59:06.327 に答える
2

Painful but if you had to use one..
I'd recommend the DevPartner BoundsChecker suite.. that's what people at my workplace use for this purpose. Paid n proprietary.. not freeware.

于 2008-09-10T05:19:06.653 に答える
2

静的分析のみを行うcppcheckでかなりのヒットがありました。これはオープン ソースであり、コマンド ライン インターフェイスを備えています (他の方法では使用しませんでした)。

于 2012-09-18T15:28:01.020 に答える
1

メモリ リークの Win32 デバッグについては、Visual C のライブラリとして提供されているプレーンな古い CRT デバッグ ヒープを使用して、非常に良い経験をしました。

デバッグ ビルドでは、malloc (他) が _malloc_dbg (他) として再定義され、結果を取得するための他の呼び出しがあり、_DEBUG が設定されていない場合はすべて未定義です。ヒープにあらゆる種類の境界ガードを設定し、いつでも結果を表示できるようにします。

_CRT_BLOCK を発見するまで、ライブラリの実行時の割り当てを台無しにする時間ルーチンをいくつか知っていたときに、いくつかの誤検知がありました。

最初に DOS を作成し、次に Win32 コンソールと永久に実行されるサービスを作成する必要がありました。私の知る限り、メモリ リークはなく、少なくとも 1 つの場所で、PC のモニターが故障する前にコードが 2 年間無人で実行されました (ただし、PC は問題ありませんでした!)。

于 2008-09-11T04:25:26.477 に答える
1

私は、メモリリークディテクタに対する愛はほとんどありませんでした。通常、偽陽性が多すぎて役に立たない. 邪魔にならないものとして、次の 2 つをお勧めします。

グローコード

デバッグ ヒープ

于 2008-09-10T04:52:19.637 に答える
1

Windows では、Visual Leak Detectorを使用しました。VC++ と統合され、使いやすく (ヘッダーをインクルードし、LIB を検索するように設定するだけです)、オープン ソースで、FTW を自由に使用できます。

于 2008-11-11T14:45:06.987 に答える
0

大学では、Unix Solarisでほとんどのことを行っていたときに、gdbを使用しました。

ただし、Linuxではvalgrindを使用します。

于 2008-09-10T05:46:47.197 に答える
0

これらのツールの祖先は商用のクローズド ソースのPurifyツールで、IBM に売却され、その後 UNICOM に売却されました。

Parasoft のInsure++ (ソース コード インストルメンテーション) と valgrind (オープン ソース) は、他の 2 つの真の競合相手です。

豆知識: Purify のオリジナルの作者である Reed Hastings は、NetFlix を設立しました。

于 2008-09-25T21:13:12.277 に答える
0

この質問は古いかもしれませんが、とにかく答えます。私の答えは、誰かがメモリリークを見つけるのに役立つかもしれません。

これは私自身のプロジェクトです。オープン ソース コードとして公開しました。

https://sourceforge.net/projects/diagnostic/

Windows 32 および 64 ビット プラットフォームがサポートされており、ネイティブおよび混合モードのコールスタックがサポートされています。

.NET ガベージ コレクションはサポートされていません。(C++ cli の gcnew または C# の new)

これは高性能ツールであり、統合を必要としません (本当に統合したい場合を除きます)。

完全なマニュアルは次の場所にあります。

http://diagnostic.sourceforge.net/index.html

プロセスで実際にどれだけのリークが検出されるかを恐れないでください。プロセス全体からのメモリリークをキャッチします。すべてではなく、最大のリークのみを分析します。

于 2016-11-03T17:43:39.713 に答える
-1

メモリリークの外部ツールとしてvalgrindを2番目にします。
しかし、私が解決しなければならなかった問題のほとんどについて、私は常に内部で構築されたツールを使用してきました。外部ツールのオーバーヘッドが大きすぎたり、セットアップが複雑すぎたりする場合があります。

自分で書くことができるのに、なぜすでに書かれたコードを使うのか:)

冗談ですが、簡単なものが必要な場合があり、自分で書く方が速い場合があります。通常、malloc()とfree()の呼び出しを、誰が何を割り当てるかをより正確に追跡する関数に置き換えます。私の問題のほとんどは誰かが解放するのを忘れたようで、これはその問題を解決するのに役立ちます。

それは本当にリークがどこにあるかに依存します、そしてあなたがそれを知っていれば、あなたはどんな道具も必要としないでしょう。しかし、それがどこで漏れていると思うかについてある程度の洞察がある場合は、独自の計装を入れて、それが役立つかどうかを確認してください。

于 2008-09-10T18:38:42.237 に答える
-1

当社のCheckPointerツールは、GNU C 3/4、および C の MS ダイアレクト、および GreenHills C に対してこれを実行できます。Valgrind では検出できないメモリ管理の問題を検出できます。

コードが単純にリークする場合、終了時に CheckPointer は解放されていないメモリがすべて割り当てられた場所を教えてくれます。

于 2012-06-26T07:36:52.497 に答える