web-dev-qa-db-ja.com

アドレスからの読み取り/書き込みでgdbを中断できますか?

可能性のある複製:
GDBの「メモリアクセス」にブレークポイントを設定できますか?

破損しているメモリ内の特定の場所があり、その場所に書き込みが行われるタイミングを正確に確認したい。特定のアドレスへのメモリアクセスでgdbを中断させる方法はありますか?

24
Alex

はい
使用ウォッチポイント
watch-書き込み時にのみブレークします(値が変更された場合のみ)
rwatch-読み取り時に中断し、
awatch-読み取り/書き込みで中断します。

一部のインターネットソースからのより詳細な概要:

watch
watchは、指定された場所でメモリが変更された場合にプログラムの実行を停止するデータブレークポイントを設定するgdbの方法です。

ウォッチブレークポイントは、変数名または任意のアドレス位置に設定できます。

watch my_variable
watch *0x12345678
where 0x12345678 is a valid address.

rwatch
rwatch(read-watch)ブレークポイントは、プログラムが変数またはメモリの場所から読み取ろうとすると、コードの実行を中断します。

rwatch iWasAccessed
rwatch *0x12345678
where 0x12345678 is a valid address.

awatch
awatchまたはaccessは、変数またはメモリ位置が読み書きされると、プログラムの実行を中断します。要約すると、awatchesは時計とrwatchesのすべてを1つにまとめたものです。これは、2つの別々のブレークポイントよりも1つのブレークポイントを作成するための便利な方法です。

awatch *0x12345678
where 0x12345678 is a valid address.
50
Alok Save