el reloj solo interrumpe en la escritura, el reloj le permite interrumpir en la lectura y el reloj le permite interrumpir en la lectura / escritura.
Puede establecer puntos de observación de lectura en ubicaciones de memoria:
gdb$ rwatch *0xfeedface
Hardware read watchpoint 2: *0xfeedface
pero una limitación se aplica a los comandos rwatch y awatch; no puedes usar variables gdb en expresiones:
gdb$ rwatch $ebx+0xec1a04f
Expression cannot be implemented with read/access watchpoint.
Entonces debes expandirlos tú mismo: 
gdb$ print $ebx 
$13 = 0x135700
gdb$ rwatch *0x135700+0xec1a04f
Hardware read watchpoint 3: *0x135700 + 0xec1a04f
gdb$ c
Hardware read watchpoint 3: *0x135700 + 0xec1a04f
Value = 0xec34daf
0x9527d6e7 in objc_msgSend ()
Editar: Ah, y por cierto. Necesita soporte de hardware o software . El software es obviamente mucho más lento. Para saber si su sistema operativo admite puntos de observación de hardware, puede ver la configuración del entorno can-use-hw-watchpoints .
gdb$ show can-use-hw-watchpoints
Debugger's willingness to use watchpoint hardware is 1.
                 
                
                
                 
watch -location mTextFormatted.print &variablewatchcomandos. Mientras tanto, esta es la primera pregunta que me viene a la mente después de leer lo anterior. ¿Cuántos bytesrwatch *0xfeedfacemirarán realmente?rwatch *(int *)0xfeedfacey verásizeof(int)bytes: sourceware.org/gdb/onlinedocs/gdb/Set-Watchpoints. htmlLo que estás buscando se llama punto de observación .
Uso
(gdb) watch foo: ver el valor de la variablefoo(gdb) watch *(int*)0x12345678: mire el valor señalado por una dirección , emitido al tipo que desee(gdb) watch a*b + c/d: mira una expresión compleja arbitraria , válida en el idioma nativo del programaLos puntos de observación son de tres tipos:
Puede elegir el más apropiado para sus necesidades.
Para más información, mira esto .
fuente
Suponiendo que la primera respuesta se refiere a la sintaxis tipo C
(char *)(0x135700 +0xec1a04f), la respuestarwatch *0x135700+0xec1a04fes incorrecta. La sintaxis correcta esrwatch *(0x135700+0xec1a04f).La falta de
()s allí me causó mucho dolor al tratar de usar los puntos de observación.fuente
Acabo de intentar lo siguiente:
Por lo tanto, parece posible, pero parece que necesita algún soporte de hardware.
fuente
Use watch para ver cuándo se escribe una variable, rwatch cuando se lee y awatch cuando se lee / escribe de / a, como se indicó anteriormente. Sin embargo, tenga en cuenta que para usar este comando, debe romper el programa y la variable debe estar dentro del alcance cuando haya roto el programa:
fuente