中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[C語言]函數與調試

發布時間:2020-08-05 23:55:30 來源:網絡 閱讀:375 作者:風子余 欄目:編程語言

函數與調試

        正常程序的調試使用gdb。但有時也會在程序中通過使用printf(),打印關鍵信息進行bug定位及調試。接下來通過實踐不斷優化改善:

1,通過在程序中直接使用printf()函數進行開發調試。但在開發調試測試結束后,必須刪除相應的調試打印函數(printf)。因為過多的打印函數存在會影響效率,所以上線時會刪掉調試打印函數。但這樣就導致了生成程序出現bug需測試環境調試定位時,又得重新書寫printf進行打印調試。


2,通過使用DEBUG來控制printf函數的調用使用如下:

void test( void )
{
    /* do something */
#ifdef DEBUG
    printf("Tets Debug\n");
#endif
    /* do something */
}

若想打印出printf信息,只要在編譯時加入DEBUG選項即可。使用如下:gcc -DDEBUG main.c

此時雖然在DEBUG是已經滿足要求,需要調試時才會執行。更不會影響生產線的執行效率。但過多的#ifdef和#endif嵌套會影響代碼風格,且會影響可讀性。故有了下一版本。


3,使用宏處理。

定義個DEBUG_WRITE宏,在調試狀態時指向write_debug函數;非調試狀態DEBUG_WRITE定義變成了(void)。

使用stderr而不是stdout的原因是:stderr不存在緩存。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

#ifdef  DEBUG
#define WRITE_DEBUG( arg ) write_debug arg
#else
#define WRITE_DEBUG( arg )
#endif

/**
* @brief debug日志信息打印函數
*
* @param fmt
*/
void
write_debug( char *fmt, ... )
{
    va_list vl;
    va_start( vl, fmt );

    vfprintf( stderr, fmt, vl );

    va_end( vl );
}

int
main( int argc, char *argv[] )
{
    int   num = 10;
    char *str = "szyu";

    /* 使用時里面的括號不能省略 */
    WRITE_DEBUG( ( "num...%d, str...%s\n", num, str ) );

    return 0;
}

較之前版本,風格統一且不影響可讀性。


本文參考自《征服C指針》

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长丰县| 秦安县| 富裕县| 青川县| 元谋县| 诏安县| 迁安市| 浪卡子县| 香格里拉县| 石渠县| 溧阳市| 东乡族自治县| 张掖市| 舞钢市| 商洛市| 闽侯县| 大邑县| 大同县| 宁波市| 台江县| 油尖旺区| 五大连池市| 色达县| 荣昌县| 涞源县| 玉田县| 古浪县| 马龙县| 巴塘县| 玉环县| 临西县| 榆中县| 彭水| 资源县| 新安县| 瓦房店市| 任丘市| 陇南市| 株洲县| 乌拉特中旗| 游戏|