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.;-)

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top