2012-01-03 3 views
8

내 프로그램이 segfaults 할 때 나는 코어 덤프를 기대하지만 아무 것도 없다. 나는 -g로 컴파일하는 것이 코어 파일을 얻는 것으로 충분하다고 생각했다. 다음은 내 makefile의 gcc 행입니다.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와 함께 컴파일/링크됩니다.

그리고 여기에는 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 (또는 다른 사람을) 얘기해야합니까?

답변

17
가 핵심 크기가

core file size   (blocks, -c) 0 

다음

ulimit -c unlimited 

을 보여줍니다 경우

ulimit -a 

을 시도 0으로 설정 될 수 있음을

(수정해야 할 수 있습니다 당신의 이 스크립트를 영구적으로 변경하는 프로필 스크립트)

+0

감사합니다, 그게 핵심이었습니다. 게다가 마침내 gdb를 배워야했습니다 (그러나 조금만). 고마워. –

3

특히 적절한 자원 제한을 설정하여 코어 덤프를 사용해야합니다. 프로그램에서 설정하려는 경우 시스템 호출은 setrlimit입니다. 대부분의 경우 쉘에서 설정해야합니다. ulimit -c unlimited

귀하의 질문은 아마도 this one 및 기타 여러 가지로 작성되었습니다.

BTW,이 코어를 덤프 gcc는 일반적으로하지 않습니다, 그것은 (clang 또는 tcc 같은 gcc 또는 다른 컴파일러에 의해 컴파일 된) 프로그램입니다.

gcc -Wall -g으로 프로그램을 컴파일하는 것을 잊지 마십시오.

귀하의 질문에 여러 가지 답변이 있습니다. Google 또는 다른 검색 엔진을 통해 수천 또는 그 이상의 검색 결과를 찾을 수 있습니다.

+0

고마워! 특히 워크 알리미에 감사드립니다. 잊어 버리면 싫어요. –