2012-01-03 6 views
8

Cuando mi programa falla por defecto, espero un núcleo pero no hay ninguno. Pensé que solo compilar con -g era suficiente para obtener un archivo central. Estas son las líneas de gcc de mi makefile:¿Dónde está mi archivo central después de segfault?

gcc -g -c client.c $(incdirs) 
    gcc -g -o client client.o $(LIBDIRS) $(LIBS) -lrt -lidn -lssl \ 
    /home/calls/cgi/libcurl/lib/libcurl.a -lezxml -lxmlate $(SQLIBS) 

Todas las bibliotecas se compilan/enlazadas con -g también.

y aquí está la información de la versión de gcc:

calls/cgi/client>gcc -v 
Using built-in specs. 
Target: x86_64-redhat-linux 
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linux 
Thread model: posix 
gcc version 4.1.2 20080704 (Red Hat 4.1.2-51) 

Mi pregunta: ¿Qué más tengo que decirle a gcc (o cualquier otra persona) para obtener un archivo de la base?

Respuesta

17

puede ser que el tamaño del núcleo se pone a 0. Trate

ulimit -a 

si muestra

core file size   (blocks, -c) 0 

luego hacer

ulimit -c unlimited 

(es posible que tenga que modificar su scripts de perfil para cambiar esto permanentemente)

+0

Gracias, esa fue la clave. Además, finalmente me vi obligado a aprender gdb (pero solo un poco). Así que gracias por eso, también. –

3

Debe activar el volcado del núcleo, en particular, estableciendo el límite de recursos adecuado. La llamada al sistema es setrlimit si desea configurarlo en su programa. En la mayoría de los casos, debe configurarlo en su caparazón, p. con ulimit -c unlimited

Y su pregunta es probablemente un duplicado de this one y muchos otros.

Por cierto, no es generalmente el que gcc volcado de núcleo, es su programa (compilado por gcc o algún otro compilador, como clang o tcc).

No olvides compilar tu programa con gcc -Wall -g.

Y su pregunta tiene muchas respuestas, encontrará miles o más de ellas con Google u otro motor de búsqueda.

+0

Gracias! Y gracias especialmente por el recordatorio de la pared: odio cuando me olvido de eso. –

Cuestiones relacionadas