¿Cómo se pone un punto de interrupción en una ubicación de memoria en dbx?
-
20-08-2019 - |
Pregunta
Un compañero de trabajo tiene un programa en C que falla de manera predecible debido a que la memoria está dañada.Le gustaría usar dbx
para monitorear la ubicación de la memoria una vez asignada para identificar el código que causa la corrupción.
es posible?Si es así, ¿cuál es la sintaxis para producir un punto de interrupción en el momento de la corrupción?
Si no es así, ¿cuál sería un buen enfoque para solucionar este tipo de problema?
(Mi táctica habitual es mirar el control de código fuente para ver qué he cambiado últimamente, ya que esa suele ser la causa.Pero parece que el código en cuestión solo funcionó por suerte, por lo que no funcionará.Además, ya me eliminé como culpable por no haber trabajado nunca con el código.;-)
Solución
Después de mirar más profundamente, parece que la solución en versiones recientes de dbx
es algo como:
stop access w <address>, <size>
Desde <address>
y <size>
Pueden ser expresiones, puedes escribir comandos como:
stop access w &p, sizeof(int)
Esto supone p
es un puntero y queremos monitorear la primera palabra a la que apunta.
También me he topado con una multa tutorial sobre rastrear y pisotear errores de memoria.Usa gdb
en vez de dbx
, pero los principios deberían ser los mismos.
Otros consejos
En AIX, desea utilizar stophwp:
(dbx) help stophwp
stophwp <address> <size>
Stop execution when the contents of the specified
memory region change. This is a accomplished in
hardware and may not be available on all models.
No soy un desarrollador de Solaris, pero puede hacerlo con gdb y puntos de interrupción de hardware