1

私のコードには、内容が完全にガベージであるオブジェクトがあります。コードの他の部分で間違った書き込みが発生したと思いますが、運が悪く、私が言及したオブジェクトのアドレスに書き込みました。

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

4

3 に答える 3

4

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

たとえば、Visual Studioでは、デバッガーでアプリを起動し、(疑わしい変数の初期化に近い通常のブレークポイントで)ブレークインしてから、メニューの[デバッグ/新しいブレークポイント/新しいデータブレークポイント]に移動する必要があります。

SoftIceでは、BPMコマンドを使用できます。:)それはまたメモリアクセスで壊れる可能性があります。

于 2012-04-06T03:53:42.410 に答える
0

Windowsを使用している場合は、グローバルフラグ(gflags.exe、Windows用デバッグツールの一部)を使用して、PageHeapをオンにすることができます。([画像]タブで、.exeの名前を入力し、表示されたら[ページヒープを有効にする]チェックボックスをクリックします。)次に、プログラムを実行します。

終わったら、もう一度オフにすることを忘れないでください。

于 2012-04-06T05:20:41.560 に答える
0

プラットフォームによっては、 VirtualProtectなどを使用してメモリのその領域をロックできるはずです(Linuxではmprotectだと思います)。このようにして、メモリ領域が不適切にアクセスされたときにaccessviolation/segfaultが発生します。また、accessviolation / segfaultを取得すると、デバッガーでそれらをキャッチできます。

ただし、メモリ領域をロックするには、通常、領域をメモリページ(少なくともWindowsでは)に揃える必要があります。これは問題になる可能性があります。

それとは別に、デバッガーでデータブレークポイントを使用できます。

于 2012-04-06T03:49:04.950 に答える