건프의 소소한 개발이야기

[고급 C] Debug Message 잘 보는 방법 (4) - 디버그모드 동적으로 정의하기 본문

개발 이야기/고급 C 이야기

[고급 C] Debug Message 잘 보는 방법 (4) - 디버그모드 동적으로 정의하기

건강한프로그래머 2016. 6. 18. 12:00

안녕하세요, 건프입니다.


이전 장에서 DBGMSG 매크로 함수를 정의해서 사용하는 방법에 대해서 알아보았습니다.


이번에는, 좀 더 유동적으로


컴파일시 디버그 옵션을 주면서, 디버그 메세지를 찍을지 말지를 선택할 수 있는 예를 알아보려고 합니다.


힌트는 매크로의 #ifdef endif 를 이용하는 겁니다 :)


코드는 다음과 같습니다.




DEBUG 라는 매크로가 정의되어 있다면, 이전 코드와 같이 정의하고,

만약 아니라면, 비어있는 DEGMSG 함수를 정의해둡니다.


이렇게 짜둔 프로그램은 다음과 같이 활용이 가능합니다.



> gcc dmesg.c -Wall -o dmesg
-Wall : 모든 Warning message 를 출력해달라

-o : other name : 컴파일을 하고 실행파일 이름을 뒤에 오는 이름으로 정의해달라


결과를 보시면, DEGMSG로 출력되는 내용이 찍히지 않습니다. 디버그 모드를 주지 않았기 때문이에요.


그렇다면?


> gcc dmesg.c -Wall -o dmesg -DDEBUG

-D : 컴파일시 동적으로 매크로를 정의한다


컴파일을 하면서 동적으로 DEBUG를 정의해주었으니, 컴파일할때는 DEGMSG 함수의 내용물이 들어간 상태로 컴파일됩니다.

즉 디버그 메세지를 찍게되는 프로그램을 만들어 내는 것이죠.


훨씬 세련되게 프로그램을 짤 수 있지 않나요? ㅎㅎ


한가지를 더 확인해봅니다.




위 프로그램을 그냥 실행시키면 다음과 같습니다.



표준 출력으로 나오는 것만 콘솔창에 찍히겠죠.


그런데 만약에, 

디버그모드를 설정해주고, 

그 표준 에러 메세지를 리다이렉트시켜, 로그파일에 쓰도록 만들고

그 로그파일을 다른 콘솔창에서 추적해 보여주도록 만든다면,


실시간 상태 감시 상황을 만들 수 있습니다.



> gcc tail.c -o tail -DDEBUG

> ./tail 2> stderr_log

> tail -f stderr_log


tail : 파일의 끝을 추적하는 프로그램

-f : 실시간으로 그때그때 추적하는 옵션


동영상으로 보여드리지 못하는게 굉장히 아쉬운데

실행시켜보시면, 왼쪽(표준출력) 은 3초마다 한번씩 콘솔창에 찍히고

오른쪽(표준에러) 로그파일을 찍는 프로그램은 1초마다 그 내용물을 찍고 추적하는 모습을 확인할 수 있습니다.



준비한 것은 여기까지입니다.

보시면 알겠지만, 서버프로그램 같은 것을 돌리면서, 유저가 어떤 요청을 날리는지, 어떤 상태인지를 실시간으로 확인하는 방법 등으로 활용이 가능할 것 같습니다.


고맙습니다 :)

Comments