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
'iPhone' 카테고리의 다른 글
ios 배포버전 로그(NSLog) 숨기기 (0) | 2013.08.30 |
---|---|
ios UITableView에서 Cell에 롱터치이벤트(UILongPressGestureRecognizer)를 주었을 때 몇 번째 Cell의 index값을 가져오는 방법 (0) | 2013.07.18 |
ios 메모리 에러 찾기 NSZombieEnabled 추가 (0) | 2013.04.08 |
ios 날짜 비교 (0) | 2012.12.11 |
xcode4 svn 연결 (3) | 2012.10.16 |