0

作成したヒープに割り当てられたメモリを含むC++カスタムクラスをデバッグしようとしており、Cygwin GCC /G++でコンパイルしています。テストプログラムを実行すると、明示的にセグメンテーション違反が発生することはありませんが、プログラムの最後に「中止(コアダンプ)」と表示されます。また、CygwinGDBで見つけることができるセグメンテーションフォールトを与えるテストプログラムを作成することもできないようです。したがって、私はそれが役立つことを期待して、メモリデバッガを探しています。

私はWindowsを実行していますが、Visual Studioを持っていません。また、Dr。Memoryなどのデバッガー用の別のコマンドプロンプトでプログラムをコンパイルする方法を試したくありません。

どのメモリデバッガを使用できますか?

何か追加する必要がある場合は編集します。

4

1 に答える 1

1

memwatch(C ++でサポートされているC用のメモリデバッガー)を使用することもできます。

http://www.linkdata.se/sourcecode/memwatch/

編集:memwatchを使用するには、次のようにします。

  1. 2つのファイル(memwatch.hとmemwatch.cまたはmemwatch.cpp)を、コンパイルおよびテストするソースコードと同じディレクトリに配置します。

  2. ソースコードのすべての.cまたは.cppファイルで、次の3行を先頭に配置します。

    #include "memwatch.h"
    #define MW_STDIO
    #define MEMWATCH
    
  3. プログラムをコンパイルして実行すると、初期化されていないポインタをたどろうとすると、プログラムが(かなり大音量で)失敗します。プログラムが正常に終了すると、メモリリークが含まれるmemwatch.logというファイルが書き込まれます。ソースコード-および違反したメモリの各部分がコード内で割り当てられた行

注:これはCでの方法です(C ++でも同じだと思います)。

ポインタを出力するときに、0xFEFEFEFEFEFEFEFEのような値に等しい場合は、初期化されていないポインタがあることがわかります(最初にこれを理解するのに数時間かかりました)

于 2012-09-27T22:48:09.850 に答える