마이크로소프트 윈도우용 애플리케이션을 작성하다가 임베디드 리눅스 애플리케이션 개발로 넘어 오면서

힘든 점 하나가 디버깅입니다. 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" 뿐만 아니라 파일 이름과 행 번호를 출력할 수 있어 편합니다. ^^