91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

[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

普定县| 鄢陵县| 慈溪市| 仁布县| 卓尼县| 雅安市| 绥芬河市| 溧阳市| 呼玛县| 图片| 大渡口区| 昌乐县| 洞头县| 册亨县| 芜湖县| 吉木萨尔县| 鹤山市| 泰来县| 万州区| 剑阁县| 白银市| 通江县| 峨山| 额济纳旗| 陵水| 平定县| 孟津县| 韩城市| 吴忠市| 昌图县| 大洼县| 巧家县| 闽侯县| 福建省| 探索| 乐亭县| 莎车县| 共和县| 龙川县| 灵川县| 英超|