난 assert() 대신 int 3를 쓴다.

김포프 2011-06-19

물론 C 언어에서 제공하는 assert() 함수가 있다. 하지만 난 이걸 사용하지 않는다.
이 함수가 제공하는 callstack 꼬라지가 맘에 안들어서… -_-
assert() 실패 시 그 코드 라인이 callstack 제일 위에 나와야 하는데 그렇지 않기 때문.

물론 callstack을 적당히 조작해서 해결하는 방법도 있으나 너무 복잡하다.
그래서 다음과 같은 ASSERT() 매크로를 만들어 사용한다.

#define ASSERT(expr, ...) if(!(expr)) __asm{ int 3 }

이 매크로는 ASSERT가 실패할 때 코드 실행을 중단(break)한다.

예시:

ASSERT(life == sucks, "인생이 x같지 않다니 말이 되냐!?");

위 메시지는 디버깅 시 해당 코드 라인을 바로 보고 상황을 이해하기 위한 용도다.

PowerPC CPU용 버전

이 방법은 하드웨어 인터럽트를 이용하므로 PC에서만 동작한다.
PowerPC 계열 CPU에서는 아래처럼 해야 한다.

#define ASSERT(expr, ...) if(!(expr)) asm{trap}

즐 코딩?

img

OOP 언어만 배우면 잘못 | 설계까지 함께 배운다 | 진짜 객체지향

코드만 알면 반쪽짜리 개발자. 언어와 설계를 함께 배우려면 POCU 아카데미에서 객체지향을 들으세요!