2012-01-03 2 views
8

Когда моя программа segfaults, я ожидаю coredump, но ее нет. Я думал, что просто компиляции с -g было достаточно, чтобы получить основной файл. Вот ССАГПЗ строки из моего Makefile:Где мой основной файл после 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) 

Все библиотеки, скомпилированные/связанные с -g, а также.

А вот НКУ информацию о версии:

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) 

Мой вопрос: Что еще я должен сказать GCC (или кто-либо другой), чтобы получить файл дампа?

ответ

17

может быть, что размер ядра устанавливается на 0. Попробуйте

ulimit -a 

, если он показывает

core file size   (blocks, -c) 0 

затем сделать

ulimit -c unlimited 

(возможно, потребуется изменить ваш чтобы изменить это постоянно)

+0

Спасибо, это был ключ. Плюс я, наконец, был вынужден изучить gdb (но только немного). Так что спасибо за это. –

3

Вам необходимо включить дамп ядра, в частности, установив соответствующий ресурс. Системный вызов - setrlimit, если вы хотите установить его в своей программе. Чаще всего вам нужно установить его в своей оболочке, например. с ulimit -c unlimited

И ваш вопрос, вероятно, дублируется this one и многими другими.

Кстати, это, как правило, не gcc, которая сбрасывает ядро, это программа (составитель gcc или какой-либо другой компилятор, как clang или tcc).

Не забудьте скомпилировать свою программу с помощью gcc -Wall -g.

И ваш вопрос имеет много ответов, вы найдете тысячи или несколько из них с Google или другой поисковой системой.

+0

Спасибо! И особенно спасибо за напоминание: «Я ненавижу, когда забываю об этом. –

Смежные вопросы