2010-05-27 25 views
63

Mi programa está escrito en C++. compilado con gcc, usando -g3 -O0 -ggdb flags. Cuando se bloquea, quiero abrir su volcado del núcleo. ¿Crea un archivo de volcado de núcleo, o tengo que hacer algo para habilitar la creación de volcado de núcleo, en el programa mismo o en la computadora donde se ejecuta? ¿Dónde se crea este archivo y cuál es su nombre?Cómo habilitar el volcado del núcleo en mi programa C++ de Linux

Respuesta

81

Debe configurar ulimit -c. Si tiene 0 para este parámetro, no se crea un archivo coredump. Haga esto: ulimit -c unlimited y compruebe si todo está correcto ulimit -a. El archivo coredump se crea cuando una aplicación ha hecho, por ejemplo, algo inapropiado. El nombre del archivo en mi sistema es core.<process-pid-here>.

+0

Gracias, ejecuté "ulimit -c unlimited" de la ventana de terminal (Ubuntu), a continuación, ejecutar mi programa desde la misma ventana, y creó volcado de memoria. ¿Cómo puedo hacer que este modo sea el predeterminado? Cuando ejecuto mi programa desde el atajo de teclado, dump no se crea. –

+1

1) 'setrlimit' es una forma de establecer el tamaño del archivo central de su programa. 2) O configure 'ulimit -c unlimited' en su perfil. –

+2

Coloque la línea en su '~/.profile'. – Philipp

11

De forma predeterminada, muchos perfiles están predeterminados a 0 tamaño de archivo de núcleo porque el usuario promedio no sabe qué hacer con ellos.

Pruebe ulimit -c unlimited antes de ejecutar su programa.

39

Puede hacerlo de esta manera dentro de un programa:

#include <sys/resource.h> 

// core dumps may be disallowed by parent of this process; change that 
struct rlimit core_limits; 
core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY; 
setrlimit(RLIMIT_CORE, &core_limits); 
Cuestiones relacionadas