
애플리케이션을 작업 중인데 세그폴트가 발생하면 코어 덤프를 얻을 수 없습니다. 사실 실제 코어 덤프 파일을 전혀 구할 수가 없습니다. 간단한 테스트 케이스는 코어 덤프 파일을 생성하지만 길이는 0입니다.
ulimit -c unlimited
64비트 Ubuntu Maverick으로 정리했습니다 . 다음에 무엇을 해야 할지에 대한 조언이 있나요?
[dlee@dlee-oak t]$ ulimit -c
unlimited
[dlee@dlee-oak t]$ cat mkcore.cpp
int main() { *((int *)0) = 0; }
[dlee@dlee-oak t]$ g++ -g mkcore.cpp -o mkcore
[dlee@dlee-oak t]$ ./mkcore
Segmentation fault
[dlee@dlee-oak t]$ ls -l core*
-rw-r--r-- 1 dlee dlee 0 2010-12-21 15:00 core.2993
편집하다:추가 정보
[dlee@dlee-oak t]$ tail -n +1 /proc/sys/kernel/core_*
==> /proc/sys/kernel/core_pattern <==
core
==> /proc/sys/kernel/core_pipe_limit <==
0
==> /proc/sys/kernel/core_uses_pid <==
1
[dlee@dlee-oak t]$ tail /var/log/kern.log
<snip/>
Dec 21 16:07:40 dlee-oak kernel: [ 133.863045] mkcore[1589]: segfault at 0 ip 000000000040043d sp 00007fffbd025510 error 6 in mkcore[400000+aa000]
코어 파일을 생성하는 파일 시스템이 다음과 같다는 것을 방금 깨달았습니다.Parallels 공유 폴더. (이 Ubuntu 인스턴스는 내 Mac의 Parallels VM에서 실행되고 있습니다.) 로컬 디스크의 디렉터리에서 애플리케이션을 실행하면 코어 파일이 예상대로 생성됩니다.
그래서 질문을 약간 변경합니다. 왜 prl_fs 파일 시스템에 코어 파일을 생성하지 않습니까? 그냥 궁금해서...
편집 #2:
길이가 0인 코어 파일을 생성할 때 가 인쇄되지 않는다는 것을 알 수 있습니다 (core dumped)
. 제 정신이 맞는지 다시 한번 확인했는데, 그렇습니다. 길이가 0인 코어 파일이 실제로 생성되고 있습니다.
[dlee@dlee-oak t]$ X=$(pwd)
[dlee@dlee-oak t]$ ls -l core*
ls: cannot access core*: No such file or directory
[dlee@dlee-oak t]$ ./mkcore
Segmentation fault
[dlee@dlee-oak t]$ ls -l core*
-rw-r--r-- 1 dlee dlee 0 2010-12-22 00:41 core.6009
[dlee@dlee-oak t]$ cd ~
[dlee@dlee-oak ~]$ $X/mkcore
Segmentation fault (core dumped)
답변1
근본 원인을 명확하게 찾을 수는 없지만 길이가 0인 코어 파일은Parallels 공유 폴더.
로컬 디렉터리에서 응용 프로그램을 실행하여 문제를 해결했습니다. 또 다른 옵션은 /proc/sys/kernel/core_pattern
코어 파일을 로컬 디렉토리에 덤프하도록 설정하는 것입니다.