일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 라즈베리파이
- 안드로이드
- Deep Learning
- 정리
- 디버그모드
- RapidCheck
- C언어
- Raspberry
- Linux
- 고급C
- Object Detection
- 머신러닝
- 영상분석
- sw
- tracking
- MySQL
- Python
- php
- keras
- Video
- tensorflow
- 데이터
- 가상환경
- 서버
- Android
- FLASK
- 지능형
- IMAGE
- detection
- Machine Learning
- Today
- Total
건프의 소소한 개발이야기
[고급 C] Debug Message 잘 보는 방법 (4) - 디버그모드 동적으로 정의하기 본문
안녕하세요, 건프입니다.
이전 장에서 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초마다 그 내용물을 찍고 추적하는 모습을 확인할 수 있습니다.
준비한 것은 여기까지입니다.
보시면 알겠지만, 서버프로그램 같은 것을 돌리면서, 유저가 어떤 요청을 날리는지, 어떤 상태인지를 실시간으로 확인하는 방법 등으로 활용이 가능할 것 같습니다.
고맙습니다 :)
' 개발 이야기 > 고급 C 이야기' 카테고리의 다른 글
[고급 C] Debug Message 잘 보는 방법 (3) - 매크로함수 정의하여 사용하기 (0) | 2016.05.01 |
---|---|
[고급 C] Debug Message 잘 보는 방법 (2) - 표준 입력/출력 (0) | 2016.05.01 |
[고급 C] Debug Message 잘 보는 방법 (1) - 미리 정의된 매크로 이용 (0) | 2016.05.01 |