ultima snes rc4_debug hakchi2_0 hakchi2 hakchi hackchi descargar clusterrr c linux coredump

snes - http clusterrr com temp hakchi2_0 20 rc4_debug zip



núcleo volcado, pero el archivo principal no está en el directorio actual? (8)

Mientras ejecuto un programa en C, dice "(volcado del núcleo)" pero no puedo ver ningún archivo en la ruta actual.

He fijado y verificado el ulimit :

ulimit -c unlimited ulimit -a

También intenté encontrar el archivo llamado "core", pero ¿no obtuve el archivo descargado?
Cualquier ayuda, ¿dónde está mi archivo principal?


Con el lanzamiento de systemd , también hay otro escenario. Por defecto, systemd almacenará volcados de 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 deshabilitar con un simple "hack":

$ 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 superior al tamaño del núcleo que se está volcando, como lo hace, por ejemplo, ulimit -c unlimited .


En Ubuntu reciente (12.04 en mi caso), es posible que se imprima "Fallo de segmentación (volcado del núcleo)", pero no se produce ningún archivo central donde se pueda esperar uno (por ejemplo, para un programa compilado localmente).

Esto puede suceder si tiene un tamaño de archivo de núcleo de 0 (no lo ha hecho ulimit -c unlimited ), este es el valor predeterminado en Ubuntu. Normalmente, eso suprimiría el "(volcado del núcleo)", lo que lo llevaría a un error, pero en Ubuntu, los archivos principales se canalizan a Apport (el sistema de informes de fallos de Ubuntu) a través de /proc/sys/kernel/core_pattern , y esto parece causar la confusión. mensaje.

Si Apport descubre que el programa en cuestión no es uno para el que debería reportar bloqueos (que puede ver que ocurre en /var/log/apport.log ), /var/log/apport.log a simular el comportamiento predeterminado del kernel al colocar un archivo central 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 respecta al kernel, se generó un corefile (y se canalizó a un informe), de ahí el mensaje "Fallo de segmentación (core dumping)".

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

(Además, en general, la página del manual de core (5) - man 5 core - es una buena referencia para el lugar donde termina su archivo de núcleo y puede que no esté escrito).


Escribiendo instrucciones para obtener un volcado de memoria en Ubuntu 16.04 LTS :

  1. Como @jtn ha mencionado en su respuesta, Ubuntu delega la visualización de bloqueos para informar, que a su vez se niega a escribir el volcado porque el programa no es un paquete instalado.

  2. Para solucionar el problema, debemos asegurarnos de que Apport escriba también los archivos de volcado del núcleo para los programas que no son paquetes . Para hacerlo, cree un archivo llamado ~ / .config / apport / settings con el siguiente contenido:
    [main] unpackaged=true

  3. Ahora vuelva a bloquear su programa y vea cómo se generan los archivos de bloqueo dentro de la carpeta: / var / crash con nombres como * .1000.crash . Tenga en cuenta que gdb no puede leer estos archivos directamente.
  4. [Opcional] Para hacer que los volcados sean legibles por gdb, ejecute el siguiente comando:

    apport-unpack <location_of_report> <target_directory>

Referencias: Core_dump - Oracle VM VirtualBox


Lea /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 un ''|'', el kernel tratará el resto del patrón como un comando para ejecutar. El volcado del núcleo se escribirá en la entrada estándar de ese programa en lugar de en un archivo.

En lugar de escribir el volcado de núcleo en el disco, su sistema está configurado para enviarlo al programa abrt . La herramienta automatizada de informe de errores posiblemente no esté tan documentada como should estar ...

En cualquier caso, la respuesta rápida es que debería poder encontrar su archivo principal en /var/cache/abrt , donde abrt almacena después de ser invocado. De manera similar, otros sistemas que utilizan Apport pueden ahuyentar núcleos en /var/crash , y así sucesivamente.


Mis esfuerzos en WSL no han tenido éxito.

Para aquellos que se ejecutan en el Subsistema de Windows para Linux (WSL), parece que hay un problema abierto en este momento por falta de archivos de volcado de núcleo.

Los comentarios indican que

Este es un problema conocido que conocemos, es algo que estamos investigando.

Problema Github

Comentarios del desarrollador de Windows


Para fedora25, pude encontrar el archivo principal 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 ''


Podría pensar en dos posibilidades siguientes:

  1. Como otros ya han señalado, el programa podría chdir() . ¿El usuario que está ejecutando el programa tiene permiso para escribir en el directorio al que chdir() ? Si no, no puede crear el volcado de núcleo.

  2. Por alguna extraña razón, el volcado de núcleo no se denomina core.* Puede verificar /proc/sys/kernel/core_pattern para eso. Además, el comando de búsqueda que nombraste no encontraría un volcado de núcleo típico. Debe usar find / -name "*core.*" , Ya que el nombre típico de coredump es core.$PID


Si le faltan volcados de núcleo para binarios en RHEL y cuando usa abrt , asegúrese 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 de memoria) para los binarios que no forman parte de los paquetes instalados (por ejemplo, construidos localmente).