2009-12-18 9 views
12

¿Es posible, bajo cualquier circunstancia, restablecer el estado de un programa a lo que era durante la generación de un archivo central?Restauración del estado del programa desde un archivo central

La razón por la que pregunto es que para aprovechar la capacidad de gdb para ejecutar funciones y demás, necesita tener una instancia en ejecución. ¿Seguramente debería ser posible producir un proceso simulado del mismo ejecutable con el estado configurado para ser el contenido del núcleo?

Si no, ¿qué alternativas hay para el tipo de situación que me hizo querer hacer esto en primer lugar? En este caso, la traza secundaria del núcleo condujo a una función de biblioteca y quería replicar las entradas a esta llamada de función, pero una de las entradas era un objeto complejo que podía serializarse fácilmente en una cadena con una llamada de función en ejecución. instancia, pero no así en un volcado de núcleo.

Respuesta

7

Teóricamente es posible hacer exactamente lo que quiere, pero (AFAICT) no hay soporte para esto en GDB (todavía).

Su mejor opción es utilizar GDB-7.0 y utilizar sus scripts incorporados de python para volver a implementar la función de serialización.

+0

Gracias - no sé si las secuencias de comandos de python podrían hacer lo que quiero, pero suena muy útil de todos modos. – cyborg

2

Eso es lo que hace un archivo core ya? Si carga GDB con el ejecutable original y el archivo central

gdb myprogram.exe -c mycorefile 

Entonces que va a ir hasta el punto en donde se estrelló. Puede usar toda la funcionalidad de inspección normal para ver las variables, ver el seguimiento de la pila, etc.

¿O he entendido mal su pregunta?

+3

No puede ejecutar funciones en gdb cuando depura un archivo principal. Digamos que tengo un archivo core, localizo una variable de una clase compleja Foo y quiero ejecutar Foo.getSerialization() para obtener una buena representación de cadena simple que no puedo porque no es un proceso en ejecución. Así que la pregunta es ¿puede uno ir desde el núcleo a un proceso en ejecución. – cyborg

+1

Puede escribir algunos códigos para hacer que gdb imprima valores bonitos. Vea la API de Python aquí (http://sourceware.org/gdb/current/onlinedocs/gdb/Python-API.html#Python-API). –

+0

@JeffFoster Creo que realmente no está ayudando, si quieres llamar a cualquier función en vivo, simplemente no es posible. –

Cuestiones relacionadas