2011년 6월 28일 화요일

[iOS] NSAssert를 이용한 Objective-C 디버깅

Objective-C 용 assert()류 API인 NSAssert() 의 기본 사용법 정리.

assert() 를 기반으로 한 개발 시 디버깅 기법은 굉장히 기초적이면서도 유용하다. 일반적으로 프로그램 실행에 절대적으로 필요한 조건을 assert() 를 이용해 체크함으로써 개발 시 문제점 추적을 용이하게 해 준다.

NSAssert() 는 NSException.h 에 정의되어 있으며, 기본적으로 다음 형식으로 사용된다.
NSAssert(condition, description);
condition 에 조건식을 넣고 description 에는 condition 이 NO(false) 일시 디버깅 콘솔에 표시할 문자열(NSString)이다.

딱히 예가 필요할까 싶지만...
NSAssert( (a == 0), @"a is not 0" );
이런 식으로 a는 무조건 0이어야 한다는 것을 코드 상에 명기하는 식이 바로 assert 를 이용한 디버깅 기법이다. 이 경우 a가 0 이외의 값이었다면 프로그램이 종료되면서 일부러 오류를 일으킨다.

description을 formatted string으로 활용할 수도 있는 NSAssertN() 류의 함수를 이용할 수도 있다.
NSAssert1(condition, formatted_string, arg1);
NSAssert2(condition, formatted_string, arg1, arg2);
NSAssert3(condition, formatted_string, arg1, arg2, arg3);
이름에서 유추 가능하듯이 인자(parameter)가 몇 개냐에 따라 뒤에 숫자를 붙이는 이름의 API를 이용할 수 있다. 예를 들어
NSAssert2( (a < b), @"a[%d] is lower than b[%d]", a, b ); 
와 같은 식으로 2개의 인자를 넘겨주기 위해 NSAssert2()를 이용할 수 있다.

관련링크:
http://iphonedevelopertips.com/debugging/working-with-assertions.html

댓글 없음 :