본문 바로가기

iPhone

ios Exception Type signal







ios에서 발생하는 signal은 유닉스 표준 시그널과 비슷하다.

signal의 처리가 필요 할 때에는 핸들러를 등록해서 사하면 된다.

 signal(SIGPIPE, signal_handler);  // 시그널 등록


//핸들러

void signal_handler(int sig_num) {

      // 처리할 코드 

}


Exception Type signal

SIGSEGV (Segmentation fault signal)

- 세그먼테이션 폴트 신호, 유효하지 않은 가상메모리의 주소 또는 사용권한이 없는 메모리에 접근할 발생된다. ios에서 보통 릴리즈된 객체 접근에서 EXC_BAD_ACCESS 주로 내려온다.


SIGBUS (Bus error) =>  EXC_BAD_ACCESS (SIGBUS)

- 버스에러 신호, SIGSEGV 비슷하지만 존재하지 않는 물리적 메모리 주소를 참조할 발생된다.


SIGFPE (Floating point exception)

- 부통소수점 예외 신호, 0으로 나누거나 부동소수점 초과와 같이 규칙에 어긋난 산술 연산을 발생된다.


SIGPIPE (broken pipe signal)

- 잘못된 파이프 연산 신호, 신호는 프로세스가 파이프에 데이터를 쓰려고 하지만 반대쪽에서 데이터를 받아주는 프로세스가 없을 발생된다. ios에서 background에서 작업 (background에서는 Audio/Voip/Location 제외하고는 작업 없다.), 소켓통신 사용에서 주로 발생한다.


SIGILL

- 규칙에 어긋난 명령 신호를 의미한다. 신호는 규칙에 어긋난 하드웨어 명령문을 실행시키려 했을 프로세스로 전달된다. 실행파일 훼손, 또는 데이터 실행하려 시도시 발생하며 후자의 경우 함수를 위한 포인터가 있을 것이라고 예상된 곳에서 유요하지 않은 오브젝트를 파싱시에 발생


SIGTRAP (trace/breakpoint trap signal) EXC_BREAKPOINT

- 트랩 신호, 신호명은 PDP-11 "trap"명령에서 유래되었다. 디버거가 프로그램의 실행을 따라가다가(trace) 중단점(breakpoint) 만나면, 신호가 프로세스에게 전달된다. XCode에서 break포인트를 사용할 발생.


SIGABRT (abort signal) EXC_CRASH

- 중단 신호(abort signal), 이미 해지된 메모리를 다시 해지할 경우 발생


참조 : http://kelp.or.kr/korweblog/stories.php?story=02/03/13/6152214