sintaxis programas programa generado finalizar detener como comandos ciclo abortado c debugging coredump

programas - ¿Cómo puede un programa C producir un volcado de núcleo sin terminar?



programas en c++ (5)

Quiero un programa de C para producir un volcado de núcleo bajo ciertas circunstancias. Este es un programa que se ejecuta en un entorno de producción y no se puede detener y reiniciar fácilmente para ajustar otros tipos de código de depuración. Además, como está en un entorno de producción, no quiero llamar a abort (). Los problemas investigados no se replican fácilmente en un entorno que no sea de producción. Lo que me gustaría es que el programa, cuando detecta ciertos problemas, produzca un volcado del núcleo por sí mismo, preferiblemente con suficiente información para renombrar el archivo, y luego continúe.


¿Realmente quieres un núcleo, o simplemente un stacktrace? Si todo lo que quieres es un stacktrace, puedes echar un vistazo al código abierto here e intentar integrar el código desde allí, o simplemente llamar desde la línea de comando es suficiente.

Creo que algún código en el proyecto gdb también podría ser útil.

Otro cree que puede querer hacer es usar gdb para adjuntarlo a un proceso en ejecución.

$ gdb /path/to/exec 1234 # 1234 is the pid of the running process


El código fuente para producir un volcado del núcleo está en ''gcore'', que es parte del paquete gdb.

Además, el Sol tiene gcore .

Además, debe tener un proceso separado que ejecute el volcado del núcleo, ya que el proceso actual debe suspenderse. Encontrarás los detalles en la fuente de Gcore, o simplemente puedes ejecutar el gcore de tu plataforma con tu proceso como objetivo.


Otra forma podría ser usar la biblioteca Google Coredumper . Esto crea un resultado similar a la técnica fork + abort, pero se reproduce mejor con aplicaciones multiproceso (suspende todos los hilos durante un tiempo antes de bifurcar para que no ensucien al niño).

Ejemplo:

#include <google/coredumper.h> ... WriteCoreDump(''core.myprogram''); /* Keep going, we generated a core file, * but we didn''t crash. */


Sun describe cómo obtener un archivo principal en Solaris, HP-UX, Redhat y Windows here .

Solaris tiene el programa gcore. HP-UX puede tenerlo. De lo contrario, use gdb y su comando gcore. Windows tiene win-dbg-root / tlist.exe y win-dbg-root / adplus.vbs


void create_dump(void) { if(!fork()) { // Crash the app in your favorite way here abort() || (*((void*)0) = 42); } }

Bifurque el proceso y luego cuelgue al niño; le dará una instantánea cuando lo desee