watch (idb モードのみ)

指定した変数またはメモリー範囲にウォッチポイントを設定します。

構文

watch memory start-addr [, end-addr| :size] [access] [thread ID {,...}] [within funcname] [if cond] [commands]
watch variable lvalue [access] [thread ID {,...}] [within funcname] [if cond] [commands]

パラメーター

lvalue

メモリーの場所を指定する式。

ID

スレッド ID。

cond

条件式。

commands

デバッガーコマンドのリスト。

start-addr

メモリー領域の開始位置のアドレス。

end-addr

start-addr で開始されるメモリー領域の終了位置のアドレス。

size

start-addr で開始されるメモリー領域のサイズ。

funcname

関数名。

access

設定可能な値は以下のとおりです。

write

[read (読み取り)]

changed  このモードはメモリー内容を変更する書き込みを検出します。

any  このモードは readwrite の両方を検出します。

デフォルト値: write

説明

このコマンドは、指定された変数またはメモリー範囲に書き込みウォッチポイントを設定します。ウォッチポイントはデータ・ブレークポイントとも呼ばれます。

varname がポインターの場合、watch variable varname ではポインターの内容はウォッチされますが、varname がポイントするメモリーはウォッチされません。watch memory *varname を使用して、varname によりポイントされるメモリーをウォッチしてください。

ウォッチポイントを使用して、変数やメモリーの場所の読み取り、書き込み、変更を特定できます。

メモリーをウォッチする変数を指定するか、メモリーを直接指定します。デバッガーがウォッチする以下の項目へのアクセスを設定できます。

変数を指定した場合、ウォッチされるメモリーには、変数の型によって特定される、その変数のメモリーすべてが含まれます。

メモリーをそのアドレスで直接指定した場合、ウォッチされるメモリーは次のように定義されます。

1 つまたは複数の指定スレッドに達したときにデバッガーが停止するようにウォッチポイントを設定するには、thread とスレッド ID (複数の場合はカンマで区切る) を指定します。

条件式に基づいてウォッチポイントを設定するには、if cond を指定します。

ウォッチポイントに達したときに 1 つまたは複数のコマンドを実行するには、commands を指定します。

within funcname を指定した場合、指定した関数内にアクセスが発生したときのみプログラムの実行が停止されます。

次の例は、_nextNode 変数への書き込みアクセスをウォッチします。

(idb) 
					 whatis _nextNode
class Node* Node::_nextNode 
(idb) 
					 print "sizeof(_nextNode) =", sizeof((_nextNode))
sizeof(_nextNode) = 4 
(idb) 
					 watch variable _nextNode write
[#3: watch variable _nextNode write] 

次の例は、コマンドラインで指定された 4 バイトをウォッチします。

(idb) 
					 watch memory &_nextNode, ((long)&_nextNode) + 3 read
[#5: watch memory &_nextNode, ((long)&_nextNode) + 3 read]

次の例は、内容の変更についてコマンドラインで指定された 2 バイトをウォッチします。

(idb) 
					 watch memory &_nextNode : 2 changed [#6: stop memory&_nextNode : 2 changed]

within 修飾子を指定した場合、デバッガーは指定した関数内で発生するアクセスのみをウォッチします。ただし、呼び出した関数はウォッチしません。次に例を示します。

(idb) 
					 whatis t
int t 
(idb) 
					 watch variable t write within C::foo(void)
[#3: watch variable t write within void C::foo(void)] 
(idb) 
					 cont
Select from 
---------------------------------------------------- 
1 int C::foo(double*) 
2 void C::foo(float) 
3 void C::foo(int) 
4 void C::foo(void) 
5 None of the above 
---------------------------------------------------- 
5 
Value of <overloaded function> not completely specified 
foo is not a valid breakpoint address 
[3] Address 0x0804d5d0 was accessed at: 
void C::foo(void): src/x_overload.cxx 
[line 22, 0x08048789] foo+0x3: movl $0x0, 0x804d5d0 
0x0804d5d0: Old value = 0x0000000f 
0x0804d5d0: New value = 0x00000000 
[3] stopped at [void C::foo(void):22 0x08048793] 
22 void C::foo() { t = 0; state++; return; } 

このヘルプトピックについてのフィードバックを送信