gcore, core에 관해...
글쓴이: ohdol / 작성시간: 화, 2006/02/28 - 2:04오후
signal 처리를 해서 프로그램 내에서 gcore를 이용해 core dump 처리를 하려고 합니다.
아래 코드로 하면 아래와 같은 메세지를 내면서 core가 떨어지는데
문제는 저 core로 gdb를 이용해 디버깅을 하면
Quote:
처럼 되면서 디버깅이 안되네요.#0 0x0090e410 in __kernel_vsyscall ()
프로그램내에서 signal 처리 안하고 SIGSEGV 디폴트 처리인 core를 사용한 core dump는 gdb에서 디버깅이 잘 되거든요.
머가 문제 인지 검색해도 찾기가 쉽지 않네요.
또 기본 core는 어떤 경로에 생성되는지...
void getcore() { sprintf(sCmd, "/usr/bin/gcore -o ./core %d", getpid()); system(sCmd); } void main() { signal(SIGSEGV, getcore); segmetation fault 발생하는 구문... }
Quote:
warning: The current VSYSCALL page code requires an existing execuitable.
Use "add-symbol-file-from-memory" to load the VSYSCALL page by hand
또 daemon을
void daemon_init() { int i; pid_t pid; if( (pid = fork()) != 0) _exit(0); setsid(); signal(SIGHUP, SIG_IGN); if( (pid = fork()) != 0) _exit(0); chdir("/"); umask(0); for(i=0;i<MAXFD;i++) close(i); }
이용해서 생성하면 프로그램이 죽어도 SIGSEGV 기본 처리 루틴인 core를 이용한 core dump가 발생하지 않네요.
Quote:
daemon(3)
을 이용하면 잘 떨어지는데...
이것도 왜 그런지...? :oops:
Forums:
댓글 달기