a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

C語言調試手段:鎖定錯誤的實現方法

2020-01-26 16:07:36
字體:
來源:轉載
供稿:網友
在項目開發工程中,如果能確定哪個文件下的哪個函數下的哪行出錯--即鎖定錯誤,那該多好啊,該文章就是為此而作的。
首先來了解一下文件默認的輸出信息的函數吧:
文件信息函數:
復制代碼 代碼如下:

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__);              //當前日期
輸出:
line : 10
filename : test.c
function : main.c
time : 14:13:51
date : Oct 13 2012

理論已足,那就來看看如何鎖定錯誤吧:
一、源文件:
復制代碼 代碼如下:

[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;
}

二、輸出:
復制代碼 代碼如下:

[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 <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)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 日本一区二区三区四区视频 | 国产精品久久影院 | 精品久久毛片 | 午夜激情免费 | 日韩中文字幕在线 | 日韩成人午夜电影 | 一区二区精品 | 中文字幕一区二区三区日韩精品 | 国产一区二区三区四区在线观看 | 九九精品久久久 | 黄桃av| 色狠狠一区 | 黄色av网站在线观看 | 福利一区福利二区 | 亚洲日本欧美日韩高观看 | 日日精品 | 国产精品一区二区久久久久 | 99国产精品一区 | 91精品一区二区三区久久久久久 | 成人精品在线 | 久久成人精品一区二区三区 | 黄色一级视频 | 日韩免费 | 成人午夜在线观看 | 四虎成人精品永久免费av九九 | 在线看免费观看日本 | 资源av| 一级黄色国产 | 日韩天堂 | 91福利视频导航 | 国产一级做a爰片在线看免费 | 成人亚洲免费视频 | 国产资源在线观看 | 久久国产精品免费一区二区三区 | 久久精品久久久久久久 | 99亚洲精品 | 亚洲精品久久久久久久久久久 | 亚洲精品成人 | 亚洲国产精品久久 | 高清一区二区三区 | 亚洲精色|