검색결과 리스트
글
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
C 코딩을 하다보면,
메모리 접근 실수 등으로 'Segmentation Fault'가 자주 발생한다.
이 때, 보통 커널에서 임의로 core dump 생성을 막아 놓지 않았다면,
보통은 디버깅을 하게 된다.
(core dump가 발생하여도 컴파일시에 '-g' 옵션을 주지 않았다면 디버깅은 힘들어진다.)
그러나 'Segmentation Fault'가 발생 할 때, 임의로 시그널을 잡아서
프로그래밍을 하기도 하는데, 이럴 때는 core dump가 생성 되지 않으므로,
임의로 생성을 시켜줘야 한다.
아래는 그 예제이다.
-------------------------------------------------------------------------------------
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
void sighandler(int signum)
{
printf("Process %d got signal %d\n", getpid(), signum); // Segmentation Fault 발생 시 처리 할 문구
signal(signum, SIG_DFL); // 발생한 시그널의 handler를 Default handler로 변경
kill(getpid(), signum); // 발생한 시그널을 다시 발생 시킴
}
void main()
{
int *p = (int*)112233; // 임의의 메모리 번지
int x;
signal(SIGSEGV, sighandler); // SIGSEGV 시그널에 sighandler 등록
x = *p; // 잘못 된 메모리 접근으로 SIGSEGV 발생
printf("got to here...");
}
-------------------------------------------------------------------------------------
RECENT COMMENT