2008년 11월 12일 수요일

printf 디버거

1. 디버깅 단계어서만 printf 출력

//#define NDEBUG

#ifndef NDEBUG
#define dp(fmt,args...) printf( fmt, ## args )
#define dlp(fmt,args...) printf( "[%s %d]" fmt, __FILE__,__LINE__, ## args )
#else
#define dp(fmt,args...)
#define dlp(fmt,args...)
#endif


#define NDEBUG 라는 문장이 없으면
위 문장들은 출력을 발생하게 됩니다.


만약 프로그램 전체에서 dp를 사용한 문자열의 출력을 제거하고 싶다면
그냥 컴파일 옵션에서 -DNDEBUG 라는 것만 추가 하면됩니다



Makefile 에 있는
CFLAGS += -Wall -O2 -g

CFLAGS += -Wall -O2 -g -DNDEBUG
로 바꿔도 됩니다.



printf( "%s %s %d\n", __FILE__, __FUNCTION__, __LINE__ );
이것은 이 문장이 적혀진 라인을 포함하는 파일명과 함수명 그리고
파일의 라인번호를 출력하게 합니다.



2. 한 라인의 시작 문자열 맨 앞에서는 '\r' 문자를 사용하는 것이 좋습니다.

예를 들어

printf( "message line 1\n" );
printf( "message line 2\n" );
printf( "message line 3\n" );

이라고 한다면 이것을 다음과 같이 고쳐 주어야 합니다.

printf( "\rmessage line 1\n" );
printf( "\rmessage line 2\n" );
printf( "\rmessage line 3\n" );



3. \n을 사용하기 전까지는 화면에 출력되지 않는다.


리눅스에서 printf 문은 '\n' 을 만나기 전까지는 출력 처리가 되지 않는
다는 점을 기억합시다.!!!!

댓글 없음: