Changeset 26 in libcf for trunk/include/cf_debug.h
- Timestamp:
- 02/04/13 17:00:53 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/cf_debug.h
r25 r26 1 1 /** 2 * cf_debug.h 2 * @file cf_debug.h 3 * @author myusgun <myusgun@gmail.com> 4 * @version 0.1 5 * 6 * @remark 7 * 디버그 함수를 직접 호출하지 않고 정의된 매크로를 사용하면, 8 * Preprocessor에 _DEBUG가 정의되어 있는 경우에 만 9 * 디버그 코드가 동작하도록 할 수 있음 <br /> 10 * 디버그 메시지는 stdout 및 stderr를 이용한 파일 포인터 출력을 지원하고, 11 * 환경에 적합하도록 사용자가 구성한 컨텍스트를 이용하여 사용할 수도 있음 <br /> 12 * (단, 콜스택의 푸시/팝은 컨텍스트를 이용해야만 사용 가능) 3 13 */ 4 14 #ifndef __CF_DEBUG_H__ … … 9 19 #include <stdio.h> 10 20 21 /** 잘못된 컨텍스트 오류 */ 11 22 #define CF_ERROR_DEBUG_INVALID_CTX CF_ERROR_DEBUG - 1 23 24 /** 디버그 메시지 출력을 위한 파일 포인터 설정 오류 */ 12 25 #define CF_ERROR_DEBUG_SET_OUTPUT_FD CF_ERROR_DEBUG - 2 26 27 /** 콜스택 푸시 오류 */ 13 28 #define CF_ERROR_DEBUG_PUSH_CALLSTACK CF_ERROR_DEBUG - 3 29 30 /** 콜스택 팝 오류 */ 14 31 #define CF_ERROR_DEBUG_POP_CALLSTACK CF_ERROR_DEBUG - 4 15 32 33 /** Windows 함수 이름 매크로 재정의 */ 16 34 #ifdef _WIN32 17 35 # define __func__ __FUNCTION__ … … 19 37 20 38 #ifdef _DEBUG 39 /** 40 * 디버그 컨텍스트 생성 41 * 42 * @see CF_Debug_CreateCtx 43 */ 21 44 # define CF_DEBUG_CREATE_CTX() \ 22 45 CF_Debug_CreateCtx () 23 46 47 /** 48 * 디버그 컨텍스트 해제 49 * 50 * @param __ctx 디버그 컨텍스트 51 * 52 * @see CF_Debug_DestroyCtx 53 */ 24 54 # define CF_DEBUG_DESTROY_CTX(__ctx) \ 25 55 CF_Debug_DestroyCtx (__ctx) 26 56 27 # define CF_UPDATE_CTX(__ctx) \ 28 CF_Debug_UpdateCtx (__ctx,__FILE__,__func__,__LINE__) 29 57 /** 58 * 디버그 메시지를 지정된 파일 포인터로 출력 59 * 60 * @param __fp 파일 포인터. 표준출력(stdout) 및 표준오류(stderr) 사용 가능 61 * @param __fmt 포맷 스트링 62 * @param ... 가변 인자 63 * 64 * @see CF_Debug_Print 65 */ 30 66 # define CF_DEBUG_PRINT(__fp,__fmt,...) \ 31 67 CF_Debug_Print (__fp,__FILE__,__func__,__LINE__,__fmt,##__VA_ARGS__) 32 68 69 /** 70 * 바이너리 데이터를 디버그 메시지와 함께 지정된 파일 포인터로 출력 71 * 72 * @param __fp 파일 포인터. 표준출력(stdout) 및 표준오류(stderr) 사용 가능 73 * @param __bin 바이너리 데이터 74 * @param __len 바이너리 길이 75 * @param __fmt 포맷 스트링 76 * @param ... 가변 인자 77 * 78 * @see CF_Debug_PrintBin 79 */ 33 80 # define CF_DEBUG_PRINT_BIN(__fp,__bin,__len,__fmt,...) \ 34 81 CF_Debug_PrintBin (__fp,__FILE__,__func__,__LINE__,__bin,__len,__fmt,##__VA_ARGS__) 35 82 83 /** 84 * 컨텍스트를 업데이트하고 디버그 메시지를 출력 85 * 86 * @param __ctx 디버그 컨텍스트 87 * @param __fmt 포맷 스트링 88 * @param ... 가변 인자 89 * 90 * @see CF_DEBUG_UPDATE_CTX, CF_Debug_Trace 91 */ 36 92 # define CF_DEBUG_TRACE(__ctx,__fmt,...) \ 37 do { \ 38 CF_UPDATE_CTX (__ctx); \ 39 CF_Debug_Trace (__ctx,__fmt,##__VA_ARGS__); \ 40 } while (0) 41 93 CF_Debug_Trace (__ctx,__FILE__,__func__,__LINE__,__fmt,##__VA_ARGS__) 94 95 /** 96 * 컨텍스트를 업데이트하고 바이너리 데이터를 디버그 메시지와 함께 출력 97 * 98 * @param __ctx 디버그 컨텍스트 99 * @param __bin 바이너리 데이터 100 * @param __len 바이너리 길이 101 * @param __fmt 포맷 스트링 102 * @param ... 가변 인자 103 * 104 * @see CF_DEBUG_UPDATE_CTX, CF_Debug_TraceBin 105 */ 42 106 # define CF_DEBUG_TRACE_BIN(__ctx,__bin,__len,__fmt,...) \ 43 do { \ 44 CF_UPDATE_CTX (__ctx); \ 45 CF_Debug_TraceBin (__ctx,__bin,__len,__fmt,##__VA_ARGS__); \ 46 } while (0) 47 107 CF_Debug_TraceBin (__ctx,__FILE__,__func__,__LINE__,__bin,__len,__fmt,##__VA_ARGS__) 108 109 /** 110 * 컨텍스트에 콜스택 푸시 111 * 112 * @param __ctx 디버그 컨텍스트 113 * 114 * @see CF_Debug_CallStackPush 115 */ 48 116 # define CF_DEBUG_CALLSTACK_PUSH(__ctx) \ 49 117 CF_Debug_CallStackPush (__ctx,__FILE__,__func__,__LINE__) 50 118 51 # define CF_DEBUG_CALLSTACK_POP \ 52 CF_Debug_CallStackPop 119 /** 120 * 컨텍스트에서 콜스택 팝 121 * 122 * @param __ctx 디버그 컨텍스트 123 * @param __callstack 콜스택 정보를 가져올 콜스택 데이터 구조체 포인터 124 * 125 * @see CF_Debug_CallStackPop, CF_Debug_CallStack 126 */ 127 # define CF_DEBUG_CALLSTACK_POP(__ctx,__callstack) \ 128 CF_Debug_CallStackPop (__ctx,__callstack) 53 129 #else // #ifdef _DEBUG 54 130 # define CF_DEBUG_CREATE_CTX() NULL 55 131 # define CF_DEBUG_DESTROY_CTX(__ctx) 56 # define CF_ UPDATE_CTX(__ctx)132 # define CF_DEBUG_UPDATE_CTX(__ctx) 57 133 # define CF_DEBUG_PRINT(__fp,__fmt,...) 58 134 # define CF_DEBUG_PRINT_BIN(__fp,__bin,__len,__fmt,...) … … 63 139 #endif // #ifdef _DEBUG 64 140 141 /** 디버그 컨텍스트 */ 65 142 typedef void * CF_Debug_Ctx; 143 144 /** 콜스택 데이터 */ 66 145 typedef struct cf_debug_callStack { 67 char file[NAME_LENGTH + 1]; 68 char function[NAME_LENGTH + 1]; 69 int line; 146 char file[NAME_LENGTH + 1]; /**< 파일 이름 */ 147 char function[NAME_LENGTH + 1]; /**< 함수 이름 */ 148 int line; /**< 라인 넘버 */ 70 149 } CF_Debug_CallStack; 71 150 … … 74 153 #endif 75 154 155 /** 156 * 디버그 컨텍스트를 생성 157 * 158 * @return 성공 시, CF_Debug_Ctx 형태의 컨텍스트; 실패 시, NULL 159 * @see CF_DEBUG_CREATE_CTX 160 */ 76 161 CF_EXPORT CF_Debug_Ctx 77 162 CF_Debug_CreateCtx (void); 78 163 164 /** 165 * 디버그 컨텍스트를 해제 166 * 167 * @return 성공 시, CF_OK; 실패 시, 오류 코드 168 * 169 * @param ctx 디버그 컨텍스트 170 * 171 * @see CF_DEBUG_DESTROY_CTX 172 */ 79 173 CF_EXPORT int 80 174 CF_Debug_DestroyCtx (CF_Debug_Ctx ctx); 81 175 176 /** 177 * 디버그 컨텍스트에 출력할 파일 디스크립터를 설정 178 * 179 * @return 성공 시, CF_OK; 실패 시, 오류 코드 180 * 181 * @param ctx 디버그 컨텍스트 182 * @param fd 파일 디스크립터 183 * 184 * @see CF_File_Open, CF_File_Create 185 */ 82 186 CF_EXPORT int 83 187 CF_Debug_SetOutputFD (CF_Debug_Ctx ctx, 84 188 int fd); 85 189 190 /** 191 * 디버그 메시지를 지정된 파일 포인터로 출력 192 * 193 * @return 성공 시, CF_OK; 실패 시, 오류 코드 194 * 195 * @param fp 파일 포인터. 표준출력(stdout) 및 표준오류(stderr) 사용 가능 196 * @param file 파일 경로 197 * @param func 함수 이름 198 * @param line 라인 넘버 199 * @param fmt 포맷 스트링 200 * @param ... 가변 인자 201 * 202 * @see CF_DEBUG_PRINT 203 */ 86 204 CF_EXPORT int 87 205 CF_Debug_Print (FILE * fp, … … 91 209 const char * fmt, ...); 92 210 93 int 211 /** 212 * 바이너리 데이터를 디버그 메시지와 함께 지정된 파일 포인터로 출력 213 * 214 * @return CF_OK 반환 215 * 216 * @param fp 파일 포인터. 표준출력(stdout) 및 표준오류(stderr) 사용 가능 217 * @param file 파일 경로 218 * @param func 함수 이름 219 * @param line 라인 넘버 220 * @param bin 라인 넘버 221 * @param len 바이너리 길이 222 * @param fmt 포맷 스트링 223 * @param ... 가변 인자 224 * 225 * @see CF_DEBUG_PRINT_BIN 226 */ 227 CF_EXPORT int 94 228 CF_Debug_PrintBin (FILE * fp, 95 229 const char * file, … … 100 234 const char * fmt, ...); 101 235 102 CF_EXPORT int 103 CF_Debug_UpdateCtx (CF_Debug_Ctx ctx, 104 const char * file, 105 const char * func, 106 const int line); 107 236 /** 237 * 컨텍스트를 업데이트하고 디버그 메시지를 출력 238 * 239 * @return CF_OK 반환 240 * 241 * @param ctx 디버그 컨텍스트 242 * @param fmt 포맷 스트링 243 * @param ... 가변 인자 244 * 245 * @see CF_DEBUG_UPDATE_CTX, CF_Debug_Trace 246 */ 108 247 CF_EXPORT int 109 248 CF_Debug_Trace (CF_Debug_Ctx ctx, 110 249 const char * fmt, ...); 111 250 251 /** 252 * 컨텍스트를 업데이트하고 바이너리 데이터를 디버그 메시지와 함께 출력 253 * 254 * @return 성공 시, CF_OK; 실패 시, 오류 코드 255 * 256 * @param ctx 디버그 컨텍스트 257 * @param bin 바이너리 데이터 258 * @param len 바이너리 길이 259 * @param fmt 포맷 스트링 260 * @param ... 가변 인자 261 * 262 * @see CF_DEBUG_UPDATE_CTX, CF_DEBUG_TRACE_BIN 263 */ 112 264 CF_EXPORT int 113 265 CF_Debug_TraceBin (CF_Debug_Ctx ctx, … … 116 268 const char * fmt, ...); 117 269 270 /** 271 * 컨텍스트에 콜스택 푸시 272 * 273 * @return 성공 시, CF_OK; 실패 시, 오류 코드 274 * 275 * @param ctx 디버그 컨텍스트 276 * @param file 파일 경로 277 * @param func 함수 이름 278 * @param line 라인 넘버 279 * 280 * @see CF_DEBUG_CALLSTACK_PUSH 281 */ 118 282 CF_EXPORT int 119 283 CF_Debug_CallStackPush (CF_Debug_Ctx ctx, … … 122 286 const int line); 123 287 288 /** 289 * 컨텍스트에서 콜스택 팝 290 * 291 * @return 성공 시, CF_OK; 실패 시, 오류 코드 292 * 293 * @param ctx 디버그 컨텍스트 294 * @param callstack 콜스택 정보를 가져올 콜스택 데이터 구조체 포인터 295 * 296 * @see CF_Debug_CallStackPop, CF_Debug_CallStack 297 */ 124 298 CF_EXPORT int 125 299 CF_Debug_CallStackPop (CF_Debug_Ctx ctx,
Note:
See TracChangeset
for help on using the changeset viewer.