간단한 디버그 함수
Programming/C 2010. 8. 16. 16:06
간단히 디버그를 하기위해 사용하는 함수
맨날 생각은 했는데 귀찮아서 안만들다가 시간 나는대로 만드러봐써여.
가변인자랑, C언어 내장 매크로 (정확히 하면 __FUNCTION__은 아니지만)를 사용하여 만듬.
사실 저 매크로는 많이쓰니깐 익숙한데... 가변인자는 오랜만에 보니깐 몇줄은 안되지만.... 또 새롭네 (......)
버퍼크기랑, 스레드 문제만 조금 손보면 어느정도 사용가능할듯 합니다만.....
소스>
사용>
결과 예시>
아 그리고 ## 매크로에 대해서 추가작성.......
"##" 매크로는....... 그러니까
"아규먼트로 넘어온 것을 string으로 그대로 컴파일러에서 사용한다" 정도로 생각하면 될것 같다
"args..." 로 넘어온 문자열 (("%s", a1, a2) 같은 -)을 그대로 사용한다 라고 보면 될듯.
몰라... 귀찮아,... 설명이 제대로 안되 ㅠㅠ 자세한건...패스하져..
음...매크로에 관심있으면 다음글도 한번 읽어보세요... 잘 써놓으신듯.
http://www.jiniya.net/tt/528
ps1: VS6에서는 기본적으로 __FUNCTION__ 이 지원되지 않습니다
ps2: VS6에서는 가변인자 메크로가 먹히지 않습니다(??),
그나마 2003부터인가는 사용이 가능하다고 하는데... 그것도 소스 수정을 좀 해야합니다.
직접해보지는 않았습니다만, 다음과 같이 하면 된다네요.
ps2: Windows환경이면..... GetLastError()함수도 뒤에 넣어서 사용해도 되겠져...
맨날 생각은 했는데 귀찮아서 안만들다가 시간 나는대로 만드러봐써여.
가변인자랑, C언어 내장 매크로 (정확히 하면 __FUNCTION__은 아니지만)를 사용하여 만듬.
사실 저 매크로는 많이쓰니깐 익숙한데... 가변인자는 오랜만에 보니깐 몇줄은 안되지만.... 또 새롭네 (......)
버퍼크기랑, 스레드 문제만 조금 손보면 어느정도 사용가능할듯 합니다만.....
소스>
#define DEBUG_MSG(printf_format, args...) DebugMessage(__FILE__, __FUNCTION__, __LINE__, __TIME__, printf_format, ##args)
#define DEBUG_MAX_BUFFER_SIZE 5000
void DebugMessage (const char *source_filename, const char *function, const int line, const char *time, const char *format, ...)
{
char buffer[DEBUG_MAX_BUFFER_SIZE];
va_list arg_list;
int read_len;
va_start(arg_list, format);
read_len = vsnprintf(buffer, DEBUG_MAX_BUFFER_SIZE, format, arg_list);
printf("[%s] - {%s}(%s:%d)\n%s\n", time, source_filename, function, line, buffer);
// 필요에 따라서, 로그를 파일로 기록함. (알아서 만드셈 -_-)
File_Write(DEBUG_LOGFILE_PATH, buffer, read_len);
va_end(arg_list);
} /* ----- end of function DebugMessage ----- */
#define DEBUG_MAX_BUFFER_SIZE 5000
void DebugMessage (const char *source_filename, const char *function, const int line, const char *time, const char *format, ...)
{
char buffer[DEBUG_MAX_BUFFER_SIZE];
va_list arg_list;
int read_len;
va_start(arg_list, format);
read_len = vsnprintf(buffer, DEBUG_MAX_BUFFER_SIZE, format, arg_list);
printf("[%s] - {%s}(%s:%d)\n%s\n", time, source_filename, function, line, buffer);
// 필요에 따라서, 로그를 파일로 기록함. (알아서 만드셈 -_-)
File_Write(DEBUG_LOGFILE_PATH, buffer, read_len);
va_end(arg_list);
} /* ----- end of function DebugMessage ----- */
사용>
DEBUG_MSG("play file path: %s\n", music_data->filepath);
결과 예시>
[15:55:42] - {mpd_check.c}(mpd_check_data_init:197)
play file path: /data/mp3/rock-kor/레이지본/레이지본 2집/03 DO IT YOURSELF.mp3
play file path: /data/mp3/rock-kor/레이지본/레이지본 2집/03 DO IT YOURSELF.mp3
아 그리고 ## 매크로에 대해서 추가작성.......
"##" 매크로는....... 그러니까
"아규먼트로 넘어온 것을 string으로 그대로 컴파일러에서 사용한다" 정도로 생각하면 될것 같다
"args..." 로 넘어온 문자열 (("%s", a1, a2) 같은 -)을 그대로 사용한다 라고 보면 될듯.
몰라... 귀찮아,... 설명이 제대로 안되 ㅠㅠ 자세한건...패스하져..
음...매크로에 관심있으면 다음글도 한번 읽어보세요... 잘 써놓으신듯.
http://www.jiniya.net/tt/528
ps1: VS6에서는 기본적으로 __FUNCTION__ 이 지원되지 않습니다
ps2: VS6에서는 가변인자 메크로가 먹히지 않습니다(??),
그나마 2003부터인가는 사용이 가능하다고 하는데... 그것도 소스 수정을 좀 해야합니다.
직접해보지는 않았습니다만, 다음과 같이 하면 된다네요.
#define DEBUG_MSG(printf_format, ...)
DebugMessage(__FILE__, __FUNCTION__, __LINE__, __TIME__, printf_format, __VA_ARGS__)
// 2010, 9 15 내용 추가
// 2010, 9 15 내용 추가
ps2: Windows환경이면..... GetLastError()함수도 뒤에 넣어서 사용해도 되겠져...
'Programming > C' 카테고리의 다른 글
포인터 연습 (6) | 2011.05.27 |
---|---|
오늘도 실수.. iconv (0) | 2010.06.24 |
아아 또 실수~! (4) | 2009.06.22 |
주의력 부족 (2) | 2009.06.22 |
이진트리를 만들고나서....아 망했어요... (2) | 2009.05.25 |