난 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

제대로 대우받는 개발자 | 부족한 컴공지식 배우기 | MIT급 컴공인강

최저임금으로 고통받는 일회성 프로그래머는 그만! POCU 아카데미가 올해 연봉협상을 책임지겠습니다!