2012-10-06 24 views
7

Estoy usando Ubuntu 12.04 LTS. Escribí un programa simple de la siguiente manera para crear accidenteNo se puede crear un archivo core para mi programa bloqueado

// null.c 
#include<stdio.h> 

int main() 
{ 
    int *p = NULL; 
    int k=*p; 
    printf("%d",sizeof(0)); 
    return 0; 
} 

ahora funciono con "gcc -g null.c" y luego "./a.out" y la salida es la esperada.

Segmentation fault (core dumped) 

Ahora quiero ver el archivo de volcado del núcleo usando gdb. Hice las siguientes cosas

  1. he comprobado el directorio actual, no hay ningún archivo de volcado de memoria
  2. Probé tratado de cambiar el directorio/proc/sys/kernel/core_pattern con el contenido "núcleo.% E.% pag". Pero no puedo escribir en el archivo. Está diciendo "Fsync falló".
  3. Utilicé el "sudo vi/proc/sys/kernel/core_pattern". Aún no puede escribir en el archivo.

Quiero crear el volcado del núcleo en mi directorio actual. ¿Qué hacer ahora?

Respuesta

19

Su pregunta real parece no ser "¿dónde está mi volcado del núcleo", sino más bien "cómo puedo modificar /proc/sys/kernel/core_pattern".

sudo bash -c 'echo core.%e.%p > /proc/sys/kernel/core_pattern' 

deberían hacer el truco.

+0

Funcionó ... Gracias :) –

4

Es necesario ajustar el límite de tamaño de núcleo volcado con el siguiente comando:

ulimit -c -S-máxima núcleo volcado de tamaño

El valor está expresado en Kb .

+0

Lo configuro. ¿Pero cómo puedo editar el archivo core_pattern? –

2

no es necesario utilizar el patrón del núcleo. es sólo vuelca en ese formato% e.% p

lo que hay que hacer es #ulimit -c ilimitada

y comprobar #ulimit -a

y confirme si el tamaño del archivo de núcleo está configurado correctamente. Obtendrás el núcleo como core.pid después de eso.

1

Según tengo entendido, el uso de ulimit no es permanente, es decir, si reinicias, el límite volverá a 0. Para tener permanente ilimitado, debes cambiar /etc/security/limits.conf. Del mismo modo para el patrón de núcleo, etc., cambie /etc/sysctl.conf.

Cuestiones relacionadas