最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言調(diào)試手段:鎖定錯(cuò)誤的實(shí)現(xiàn)方法

 更新時(shí)間:2013年05月27日 10:43:26   作者:  
本篇文章是對(duì)在C語(yǔ)言調(diào)試中,鎖定錯(cuò)誤的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
在項(xiàng)目開(kāi)發(fā)工程中,如果能確定哪個(gè)文件下的哪個(gè)函數(shù)下的哪行出錯(cuò)--即鎖定錯(cuò)誤,那該多好啊,該文章就是為此而作的。
首先來(lái)了解一下文件默認(rèn)的輸出信息的函數(shù)吧:
文件信息函數(shù):
復(fù)制代碼 代碼如下:

printf("line : %d\n", __LINE__);                   //當(dāng)前行數(shù)
printf("filename : %s\n", __FILE__);             //當(dāng)前文件名
printf("function : %s\n", __FUNCTION__);  //當(dāng)前函數(shù)
printf("time : %s\n", __TIME__);                  //當(dāng)前時(shí)間
printf ("date : %s\n",  __DATE__);              //當(dāng)前日期
輸出:
line : 10
filename : test.c
function : main.c
time : 14:13:51
date : Oct 13 2012

理論已足,那就來(lái)看看如何鎖定錯(cuò)誤吧:
一、源文件:
復(fù)制代碼 代碼如下:

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

二、輸出:
復(fù)制代碼 代碼如下:

[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處理:
復(fù)制代碼 代碼如下:

#ifdef DEBUG
    #define DBG(fmt, args...)  printf("Debug " fmt, ##args)// ##運(yùn)算符用于把參數(shù)連接到一起。預(yù)處理程序把出現(xiàn)在##兩側(cè)的參數(shù)合并成一個(gè)符號(hào)。
#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)

相關(guān)文章

最新評(píng)論

松溪县| 三门县| 什邡市| 贵定县| 米泉市| 平湖市| 永昌县| 兴化市| 临高县| 徐水县| 林甸县| 新兴县| 富宁县| 新建县| 东乡县| 攀枝花市| 通山县| 日喀则市| 榆树市| 娄底市| 昭平县| 柘城县| 灵山县| 阳春市| 衡山县| 旌德县| 左权县| 若羌县| 兴海县| 杂多县| 施秉县| 旌德县| 托里县| 徐水县| 湘乡市| 城步| 米泉市| 北碚区| 柏乡县| 眉山市| 安徽省|