C 언어 디버깅 수단: 잠금 오류의 실현 방법
어느 함수 아래의 어느 줄이 잘못되었는지--즉 잠금 오류였으면 얼마나 좋았을까, 이 문장은 바로 이것을 위해 만든 것이다.
우선 파일의 기본 출력 정보의 함수를 알아보자.
파일 정보 함수:
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)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.