源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C语言调试手段:锁定错误的实现方法

  • 时间:2021-12-04 15:20 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C语言调试手段:锁定错误的实现方法
在项目开发工程中,如果能确定哪个文件下的[b]哪个函数下的哪行出错--即锁定错误[/b],那该多好啊,该文章就是为此而作的。 [b]首先来了解一下文件默认的输出信息的函数吧:[/b] [b]文件信息函数: [/b]
[u]复制代码[/u] 代码如下:
printf("line : %d\n", __LINE__);                   //当前行数 printf("filename : %s\n", __FILE__);             //当前文件名 printf("function : %s\n", __FUNCTION__);  //当前函数 printf("time : %s\n", __TIME__);                  //当前时间 printf ("date : %s\n",  __DATE__);              //当前日期 [b]输出:[/b] line : 10 filename : test.c function : main.c time : 14:13:51 date : Oct 13 2012
[b]理论已足,那就来看看如何锁定错误吧:[/b] [b]一、源文件:[/b]
[u]复制代码[/u] 代码如下:
[root@localhost for_test]# cat erroutput.c #include <stdio.h> #include <assert.h> #define _DEBUG(msg...)    printf("[ %s,%s, %d ]=>",__FILE__, __FUNCTION__, __LINE__);  printf(msg);printf("\r\n") #define _ERROR(msg...)    printf("[ error: %s, %d]=>", __FILE__,  __LINE__);printf(msg); printf("\r\n") #define _ASSERT(exp)      \                         do {\                                 if (!(exp)) {\                                 printf( "[ %s ]  ",#exp);printf("\r\n");\                                 assert(exp);\                                 }\                         } while (0) int main(void) {         char *p = NULL;         _DEBUG("DEBUG!");         _ERROR("ERROR!");         _ASSERT(NULL != p);         return 0; }
[b]二、输出: [/b]
[u]复制代码[/u] 代码如下:
[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. 已放弃
[b]TI处理:[/b]
[u]复制代码[/u] 代码如下:
#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 <stdio.h> //#define DEBUG int main(void) {        DBG("xxxx\n");        ERR("xxxx\n");        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)
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部