C/C++
마이크로소프트 윈도우용 애플리케이션을 작성하다가 임베디드 리눅스 애플리케이션 개발로 넘어 오면서
힘든 점 하나가 디버깅입니다. gdb가 있지만, 보통 printf()에 많이 의존하지요.
혹시 printf()로 디버그 정보를 출력할 때 소스의 파일 이름과 행 번호를 함께 출력해 주면 편하지 않을까요?
소스 파일 이름은 __FILE__로, 행 번호는 __LINE__로 구할 수 있습니다.
void debug_printf( char *file, int line, char *fmt, ...){
static char buff[2048];
va_list ap;
va_start(ap, fmt);
vsprintf( buff, fmt, ap);
va_end(ap);
printf( "[%s:%d]%s", file, line, buff);
}
int main( void)
{
debug_printf( __FILE__, __LINE__, "%s\n", "debug");
return 0;
}
debug_printf()가 printf()보다 편해지기는 했지만, 매번 __FILE__, __LINE__를 인수로 넣어 주어야 하기 때문에 불편하지요.
그래서 아래와 같이 매크로 함수를 사용하면 편합니다.
#define DPRINTF( fmt, args...) debug_printf( __FILE__, __LINE__, fmt, args);
int main( void)
{
DPRINTF( "%s\n", "debug");
return 0;
}
디버그 문자열 "debug" 뿐만 아니라 파일 이름과 행 번호를 출력할 수 있어 편합니다. ^^