núcleo objeto de dumping, pero el archivo principal no está en el directorio actual?

Mientras ejecuta un progtwig C, dice “(núcleo volcado)”, pero no puedo ver ningún archivo en la ruta actual.

He establecido y verificado el ulimit :

 ulimit -c unlimited ulimit -a 

También traté de encontrar un archivo llamado “core”, pero ¿no obtuve el archivo core dump?
Cualquier ayuda, ¿dónde está mi archivo principal?

Lee /usr/src/linux/Documentation/sysctl/kernel.txt .

[/ proc / sys / kernel /] core_pattern se usa para especificar un nombre de patrón de volcado de núcleo.

  • Si el primer carácter del patrón es ‘|’, el núcleo tratará el rest del patrón como un comando para ejecutar. El volcado del núcleo se escribirá en la entrada estándar de ese progtwig en lugar de en un archivo.

En lugar de escribir el volcado del núcleo en el disco, su sistema está configurado para enviarlo al progtwig abrt . La herramienta Automated Bug Reporting posiblemente no esté tan documentada como debería …

En cualquier caso, la respuesta rápida es que debería poder encontrar su archivo central en /var/cache/abrt , donde abrt almacena después de ser invocado. Del mismo modo, otros sistemas que usan Apport pueden arrancar núcleos en /var/crash , y así sucesivamente.

En Ubuntu reciente (12.04 en mi caso), es posible que se imprima “Segmentation fault (core dumped)”, pero no se produce ningún archivo core donde se pueda esperar (por ejemplo, para un progtwig comstackdo localmente).

Esto puede suceder si tiene un tamaño de archivo core ulimit de 0 (no ha hecho ulimit -c unlimited ) – este es el valor predeterminado en Ubuntu. Normalmente eso suprimiría el “núcleo vacío”, lo detectaría en su error, pero en Ubuntu, los archivos centrales se canalizan a Apport (el sistema de informes de fallas de Ubuntu) a través de /proc/sys/kernel/core_pattern , y esto parece causar el engaño. mensaje.

Si Apport descubre que el progtwig en cuestión no es uno para el que debería informar lockings (que se puede ver que ocurre en /var/log/apport.log ), se vuelve a simular el comportamiento predeterminado del kernel de poner un archivo core en el cwd (esto se hace en el script /usr/share/apport/apport ). Esto incluye honrar a ulimit, en cuyo caso no hace nada. Pero (supongo) en lo que se refiere al kernel, se generó un archivo core (y se canalizó para su incorporación), de ahí el mensaje “Fallo de segmentación (núcleo volcado)”.

En última instancia, PEBKAC por olvidarme de establecer ulimit, pero el mensaje engañoso me hizo pensar que me estaba volviendo loco por un tiempo, preguntándome qué se estaba comiendo mis archivos principales.

(Además, en general, la página de manual de core (5) – man 5 core – es una buena referencia para saber dónde termina su archivo central y por qué podría no escribirse).

Con el lanzamiento de systemd , también hay otro escenario. De forma predeterminada, systemd almacenará los volcados del núcleo en su diario, siendo accesible con el comando systemd-coredumpctl . Definido en el archivo core_pattern:

 $ cat /proc/sys/kernel/core_pattern |/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e 

Este comportamiento se puede desactivar con un simple “truco”:

 $ ln -s /dev/null /etc/sysctl.d/50-coredump.conf $ sysctl -w kernel.core_pattern=core # or just reboot 

Como siempre, el tamaño de los volcados del núcleo debe ser igual o mayor que el tamaño del núcleo que se está volcando, como lo hace, por ejemplo, ulimit -c unlimited .

Instrucciones de escritura para obtener un volcado de núcleo en Ubuntu 16.04 LTS:

  1. Como @jtn ha mencionado en su respuesta, Ubuntu delega la pantalla de lockings para su envío , que a su vez se niega a escribir el volcado porque el progtwig no es un paquete instalado. Antes de hacer cambios

  2. Para solucionar el problema, debemos asegurarnos de que la aplicación también escriba los archivos de volcado del núcleo para los progtwigs que no son de paquete . Para hacerlo, cree un archivo llamado ~ / .config / apport / settings con los siguientes contenidos:
    [main] unpackaged=true

  3. Ahora vuelva a bloquear su progtwig y vea sus archivos de locking generados dentro de la carpeta: / var / crash con nombres como * .1000.crash . Tenga en cuenta que estos archivos no pueden ser leídos directamente por gdb . Después de hacer cambios
  4. [Opcional] Para hacer que los volcados puedan leerse mediante gdb, ejecute el siguiente comando:

    apport-unpack

Referencias: Terry: Core Dump

Podría pensar en dos posibilidades siguientes:

  1. Como otros ya han señalado, el progtwig podría chdir() . ¿El usuario que ejecuta el progtwig tiene permiso para escribir en el directorio en el que se encuentra chdir() ‘ed? Si no, no puede crear el volcado del núcleo.

  2. Por algún extraño motivo, el volcado del núcleo no se denomina core.* Para ello, puede verificar /proc/sys/kernel/core_pattern . Además, el comando de búsqueda que has nombrado no encontrará un volcado de núcleo típico. Debería usar find / -name "*core.*" , Ya que el nombre típico del coredump es core.$PID

Si te faltan volcados de núcleo para los binarios en RHEL y cuando usas abrt , asegúrate de que /etc/abrt/abrt-action-save-package-data.conf

contiene

 ProcessUnpackaged = yes 

Esto permite la creación de informes de fallos (incluidos los volcados del núcleo) para los binarios que no son parte de los paquetes instalados (por ejemplo, construidos localmente).

Para fedora25, pude encontrar el archivo core en

 /var/spool/abrt/ccpp-2017-02-16-16:36:51-2974/coredump 

donde ccpp-2017-02-16-16:36:51-2974" is pattern "%s %c %p %u %g %t %P % según `/ proc / sys / kernel / core_pattern ‘

Mis esfuerzos en WSL no han tenido éxito.

Para aquellos que se ejecutan en Subsistema de Windows para Linux (WSL), parece haber un problema abierto en este momento para los archivos de volcado del núcleo faltantes.

Los comentarios indican que

Este es un problema conocido del que tenemos conocimiento, es algo que estamos investigando.

Github problema

Comentarios del desarrollador de Windows