Cuando se produce un error de segmentación en Linux, el mensaje de error Segmentation fault (core dumped)
se imprimirá en el terminal (si corresponde) y el programa finalizará. Como desarrollador de C / C ++, esto me sucede con bastante frecuencia, y generalmente lo ignoro y sigo adelante gdb
, recreando mi acción anterior para activar nuevamente la referencia de memoria no válida. En cambio, pensé que tal vez podría usar este "núcleo", ya que ejecutar gdb
todo el tiempo es bastante tedioso y no siempre puedo recrear la falla de segmentación.
Mis preguntas son tres:
- ¿Dónde se deja este elusivo "núcleo"?
- Que contiene
- ¿Qué puedo hacer con eso?
gdb path-to-your-binary path-to-corefile
,info stack
seguido deCtrl-d
. Lo único preocupante es que el volcado del núcleo es algo habitual para usted.Respuestas:
Si otras personas limpian ...
... generalmente no encuentras nada. Pero, afortunadamente, Linux tiene un controlador para esto que puede especificar en tiempo de ejecución. En /usr/src/linux/Documentation/sysctl/kernel.txt encontrará:
( gracias )
De acuerdo con la fuente de esto es manejado por el
abrt
programa (que es automática Bug Reporting Tool, no de aborto), pero en mi Arch Linux que es manejado por systemd. Es posible que desee escribir su propio controlador o utilizar el directorio actual.¿Pero qué hay allí?
Ahora lo que contiene es específico del sistema, pero según la enciclopedia que todo lo sabe :
... así que básicamente contiene todo lo que
gdb
siempre quisiste y más.Sí, pero me gustaría que fuera feliz en lugar de gdb
Ambos pueden ser felices ya que
gdb
se cargará ningún volcado de memoria, siempre y cuando usted tiene una copia exacta de su ejecutable:gdb path/to/binary my/core.dump
. Debería poder continuar con los negocios como de costumbre y sentirse molesto al intentar y no corregir los errores en lugar de intentar y no reproducirlos.fuente
Además, si se
ulimit -c
devuelve0
, no se escribirá ningún archivo de volcado de núcleo.Consulte ¿Dónde buscar el archivo principal generado por el bloqueo de una aplicación de Linux?
También puede desencadenar un volcado de núcleo manualmente con CTRL- lo \que cierra el proceso y provoca un volcado de núcleo.
fuente
El archivo principal normalmente se llama
core
y se encuentra en el directorio de trabajo actual del proceso. Sin embargo, hay una larga lista de razones por las que no se generaría un archivo principal, y puede estar ubicado en otro lugar completamente diferente, con un nombre diferente. Vea la página del manual de core.5 para más detalles:fuente
En Ubuntu, cualquier bloqueo que ocurra se registra en / var / crash. El informe de bloqueo generado se puede desempaquetar utilizando una herramienta
y luego el volcado del núcleo en el informe desempaquetado se puede leer usando
fuente