개발 이야기
[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)
반응형