개발 이야기

[C/C++] 간단한 디버깅용 매크로 정의 (줄번호, 함수명, 파일명 기본 표시)

iian2_ 2019. 2. 15. 15:11

C나 C++로 간단한 프로그램 짤 때, 줄 번호와 함수명을 기본으로 포함시키기 위해 쓰던 간단한 디버그 스크립트 입니다.


전처리문으로 DBG라는 것을 아래와 같이 정의하고, 인자로는 printf와 같은 format string을 넣으면 됩니다.


#define DBG(format,args...) \

printf("%d %s() :" format "\n", __LINE__, __FUNCTION__, ## args)


위와 같이 하고 함수 내에서 아래와 같이 사용합니다.


int main()

{

    // Debug trace with only line number and function name

    DBG("");

    

    int num = 3;

    // Debug trace with string

    DBG("num is %d", num);


    return 0;

}


위의 코드를 실행하면 아래와 같이 줄 번호와 함수명까지 나오는 것을 확인할 수 있습니다.

10 main() :

14 main() :num is 3


조금 더 응용해서, 파일명까지 포함되도록 하기 위해서는 각 파일을 컴파일 할 때 __FILENAME__을 자동으로 정의하도록 Makefile을 조금 수정해 주어야 합니다. 
먼저, Makefile에 아래와 같은 구문을 추가해 줍니다.

CFLAGS+= -D__FILENAME__=\"$(notdir $(abspath $<))\"


그리고 아래와 DBG 정의를 아래와 같이 수정하면, 디버그 문에 파일 이름까지 나오도록 할 수 있습니다.

#define DBG(format,args...) \

printf("%s:%d %s() :" format "\n", __FILENAME__, __LINE__, __FUNCTION__, ## args)




반응형