C 언어 디버깅 수단: 잠금 오류의 실현 방법

3056 단어
프로젝트 개발 프로젝트에서 어떤 서류 아래
어느 함수 아래의 어느 줄이 잘못되었는지--즉 잠금 오류였으면 얼마나 좋았을까, 이 문장은 바로 이것을 위해 만든 것이다.
우선 파일의 기본 출력 정보의 함수를 알아보자.
파일 정보 함수:
 
  
printf("line : %d
", __LINE__);                   //
printf("filename : %s
", __FILE__);             //
printf("function : %s
", __FUNCTION__);  //
printf("time : %s
", __TIME__);                  //
printf ("date : %s
",  __DATE__);              //

line : 10
filename : test.c
function : main.c
time : 14:13:51
date : Oct 13 2012

이론이 충분하니 오류를 어떻게 잠그는지 보자.
1. 원본 파일:
 
  
[root@localhost for_test]# cat erroutput.c
#include
#include
#define _DEBUG(msg...)    printf("[ %s,%s, %d ]=>",__FILE__, __FUNCTION__, __LINE__);  printf(msg);printf("\r
")
#define _ERROR(msg...)    printf("[ error: %s, %d]=>", __FILE__,  __LINE__);printf(msg); printf("\r
")
#define _ASSERT(exp)      \
                        do {\
                                if (!(exp)) {\
                                printf( "[ %s ]  ",#exp);printf("\r
");\
                                assert(exp);\
                                }\
                        } while (0)
int main(void)
{
        char *p = NULL;
        _DEBUG("DEBUG!");
        _ERROR("ERROR!");
        _ASSERT(NULL != p);
        return 0;
}

2. 출력:
 
  
[root@localhost for_test]# gcc erroutput.c
[root@localhost for_test]# ./a.out
[ erroutput.c,main, 17 ]=>DEBUG!
[ error: erroutput.c, 18]=>ERROR!
[ NULL != p ]
a.out: erroutput.c:19: main: Assertion `((void *)0) != p' failed.


TI 처리:
 
  
#ifdef DEBUG
    #define DBG(fmt, args...)  printf("Debug " fmt, ##args)// ## 。 ## 。
#else
    #define DBG(fmt, args...)
#endif
#define ERR(fmt, args...)  printf("Error " fmt, ##args)
[root@localhost for_test]# cat debug_err.c
#include
//#define DEBUG
int main(void)
{
       DBG("xxxx
");
       ERR("xxxx
");
       return 0;
}
[root@localhost for_test]# ./a.out
Error xxxx

#ifdef __DEBUG
    #define DBG(fmt, args...) fprintf(stderr,"Encode Debug: " fmt, ## args)
#else
    #define DBG(fmt, args...)
#endif
#define ERR(fmt, args...) fprintf(stderr,"Encode Error: " fmt, ## args)

좋은 웹페이지 즐겨찾기