2012-04-06 13 views
1

私のコードでは、内容が完全にガベージであるオブジェクトがあります。私はコードの他の部分で間違った書き込みが起こったと思います。そして、私が言及したオブジェクトのアドレスに書いた(不運な)運があります。間違った書き込みを検出する方法

私はメモリアドレスが受け取るすべての書き込みを私に教えることができるツールがあるかどうか疑問に思っていたので、このバグの原因を追跡できます。

答えて

4

ほとんどのデバッガは書き込み時にブレークポイントをサポートします。

例えば、ビジュアルスタジオでは、デバッガでアプリケーションを起動し、疑わしい変数の初期化に近い通常のブレークポイントでブレークインしてから、メニューの[デバッグ/新規ブレークポイント/新規データブレークポイント]に移動します。

SoftIceでは、BPMコマンドを使用できます。 :)それはまた、メモリアクセスを壊すことができます。 Windows上でなら

+2

SoftIceを知っている人なら、私から+1が得られます。 – ildjarn

+0

いい昔です... :) – Eugene

0

ご使用のプラットフォームに応じて、VirtualProtectのようなものを(私はそれがLinux上でMPROTECTだと思います)を使用して、メモリのその領域をロックすることができるはずです。この方法では、メモリ領域が不適切にアクセスされるとアクセス違反/セグメンテーションが発生します。そして、あなたがアクセス違反/ segfaultを取得すると、デバッガでそれらを捕まえることができます。

しかし、メモリ領域をロックするために、通常領域が問題である可能性があります(少なくともWindowsの場合)メモリページに整列されなければなりません。

これ以外にも、デバッガでデータブレークポイントを使用できます。

0

、あなたは、グローバルフラグ(gflags.exe、Windows用デバッグツールの一部)を使用し、上のページヒープを有効にすることができます。 (画像]タブで、それはチェックボックス「ページヒープを有効にする」をクリックしを示したときに、あなたの.exeファイルの名前を入力します。)次に、あなたのプログラムを実行します。

完了したらもう一度オフにしてください。

関連する問題