私のコードには、内容が完全にガベージであるオブジェクトがあります。コードの他の部分で間違った書き込みが発生したと思いますが、運が悪く、私が言及したオブジェクトのアドレスに書き込みました。
このバグの原因を追跡できるように、メモリ アドレスが受け取るすべての書き込みを教えてくれるツールがあるかどうか疑問に思っていました。
ほとんどのデバッガーは、書き込み時にブレークポイントをサポートします。
たとえば、Visual Studioでは、デバッガーでアプリを起動し、(疑わしい変数の初期化に近い通常のブレークポイントで)ブレークインしてから、メニューの[デバッグ/新しいブレークポイント/新しいデータブレークポイント]に移動する必要があります。
SoftIceでは、BPMコマンドを使用できます。:)それはまたメモリアクセスで壊れる可能性があります。
Windowsを使用している場合は、グローバルフラグ(gflags.exe、Windows用デバッグツールの一部)を使用して、PageHeapをオンにすることができます。([画像]タブで、.exeの名前を入力し、表示されたら[ページヒープを有効にする]チェックボックスをクリックします。)次に、プログラムを実行します。
終わったら、もう一度オフにすることを忘れないでください。
プラットフォームによっては、 VirtualProtectなどを使用してメモリのその領域をロックできるはずです(Linuxではmprotectだと思います)。このようにして、メモリ領域が不適切にアクセスされたときにaccessviolation/segfaultが発生します。また、accessviolation / segfaultを取得すると、デバッガーでそれらをキャッチできます。
ただし、メモリ領域をロックするには、通常、領域をメモリページ(少なくともWindowsでは)に揃える必要があります。これは問題になる可能性があります。
それとは別に、デバッガーでデータブレークポイントを使用できます。