segmentation-fault – Fallo de segmentación (núcleo volcado): ¿a dónde? ¿Qué es? ¿y por qué?

Pregunta:

Cuando ocurre una falla de segmentación en Linux, el mensaje de error Segmentation fault (core dumped) se imprimirá en el terminal (si lo hubiera) y el programa se terminará. Como desarrollador de C / C ++, esto me sucede con bastante frecuencia, y generalmente lo ignoro y paso a gdb , recreando mi acción anterior para activar la referencia de memoria no válida nuevamente. En cambio, pensé que quizás podría usar este "núcleo" en su lugar, 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 arroja este escurridizo "núcleo"?
  • ¿Qué contiene?
  • ¿Qué puedo hacer con él?

Respuesta:

Si otras personas limpian …

… normalmente 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á:

core_pattern se utiliza para especificar un nombre de patrón de archivo de volcado de núcleo.

  • Si el primer carácter del patrón es un '|', el kernel tratará el resto del patrón como un comando para ejecutar. El volcado de memoria se escribirá en la entrada estándar de ese programa en lugar de en un archivo.

(¿Ver Core volcado, pero el archivo core no está en el directorio actual? En StackOverflow)

Según la fuente, esto lo maneja el programa abrt (que es la herramienta automática de informe de errores, no abortar), pero en mi Arch Linux lo maneja systemd. Es posible que desee escribir su propio controlador o usar el directorio actual.

Pero, ¿qué hay ahí?

Ahora lo que contiene es específico del sistema, pero de acuerdo con la enciclopedia que todo lo sabe :

[Un volcado de memoria] consiste en el estado registrado de la memoria de trabajo de un programa de computadora en un momento específico […]. En la práctica, otras partes clave del estado del programa generalmente se descargan al mismo tiempo, incluidos los registros del procesador, que pueden incluir el contador del programa y el puntero de pila, información de gestión de la memoria y otros indicadores e información del procesador y del sistema operativo.

… por lo que básicamente contiene todo lo que gdb siempre quiso, y más.

Sí, pero me gustaría que yo fuera feliz en lugar de gdb

Ambos pueden estar contentos ya que gdb cargará cualquier volcado de núcleo siempre que tenga una copia exacta de su ejecutable: gdb path/to/binary my/core.dump . Entonces debería poder continuar con sus actividades como de costumbre y sentirse molesto al intentar y no corregir los errores en lugar de intentar y no reproducir los errores.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım