Где находится мой основной файл после segfault?
Когда моя программа segfaults, я ожидаю coredump, но его нет. Я думал, что просто компиляции с -g было достаточно, чтобы получить основной файл. Вот строки gcc из моего файла makefile:
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.
И вот информация о версии 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)
Мой вопрос: Что еще я должен сказать gcc (или кому-либо еще), чтобы получить основной файл?
2 ответа:
Возможно, что размер ядра равен 0. Попробуйте
ulimit -a
Если он показывает
core file size (blocks, -c) 0
То
ulimit -c unlimited
(Возможно, вам потребуется изменить скрипты вашего профиля, чтобы изменить это навсегда)
Необходимо включить дамп ядра, в частности, установив соответствующий лимит ресурсов. Системный вызов setrlimit , Если вы хотите установить его в своей программе. Чаще всего вам нужно установить его в вашей оболочке, например, с помощью
ulimit -c unlimited
И ваш вопрос, вероятно, дублирует Этот и многие другие.
Кстати, обычно это не
gcc
, который сбрасывает ядро, это ваша программа (скомпилированнаяgcc
или каким-то другим компилятором, напримерclang
илиtcc
).Не забудь скомпилируйте вашу программу с помощью
gcc -Wall -g
.И ваш вопрос имеет много ответов, вы найдете тысячи или более из них с помощью Google или другой поисковой системы.