嵌入式C语言代码的调试技巧
生活随笔
收集整理的這篇文章主要介紹了
嵌入式C语言代码的调试技巧
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)載自 https://www.cnblogs.com/gongxing/p/6170111.html
在項目開發(fā)的過程中,不可避免的會遇到調(diào)試代碼的情況。
剛開始寫代碼時,我們想看具體執(zhí)行到哪兒時,往往這么寫:
printf("***** Code is here! *****\n");
隨著調(diào)試信息的不斷增多,我們項目中的printf()函數(shù)到處都是,因此,當調(diào)試完成時,發(fā)現(xiàn)需要注釋掉所有的調(diào)試代碼將非常痛苦。于是,我們通過宏定義對代碼進行了這樣的改造:
//首先,定義調(diào)試宏:#define _DEBUG_IS_MY//然后,在需要添加調(diào)試代碼的地方,添加以下代碼:#ifdef _DEBUG_IS_MYprintf("***** Code is here! *****\r\n");#endif這樣,似乎解決了問題,但這會使項目代碼顯得很臃腫,并且太多重復(fù)代碼(#ifdef _DEBUG_IS_MY ……#endif),這是程序員不能容忍的。
因此,參考很多底層代碼和網(wǎng)絡(luò)資料,看到確實已經(jīng)有很優(yōu)秀和成熟的寫法:
/* * 自定義調(diào)試宏。 * 1.快速切換debug版本和relese版本工程 * 2.簡化打印調(diào)試語句的編寫,提高開發(fā)調(diào)試效率 */ /* debug 調(diào)試宏定義 */ #define _MY_DEBUG_ 1#ifdef _MY_DEBUG_ #define MY_DEBUG_PRINT_INFO(...) printf(__VA_ARGS__)#define MY_DEBUG_PRINT_VAR(X, ...) printf("file: "__FILE__", Line: %d:"X"\r\n",__LINE__,##__VA_ARGS__) #else#define MY_DEBUG_PRINT_INFO(...)#define MY_DEBUG_PRINT_VAR(X, ...) #endif//在程序中需要添加調(diào)試代碼處,直接調(diào)用:MY_DEBUG_PRINT_INFO("code is here!");或MY_DEBUG_PRINT_VAR("code is here!");或MY_DEBUG_PRINT_VAR("recev_flag = %d .", recev_flag);LINE:在源代碼中插入當前源代碼行號;
FILE:在源文件中插入當前源文件名;
以上兩個宏,還可以用作錯誤檢測。例如被零除的問題。
#define CHECK_ZERO(divisor) \ if (0 == divisor) \printf("attemp to divide by 0 on line %d of file %s ***\r\n", __LINE__, __FILE__);CHECK_ZERO宏應(yīng)該在除法運算前被調(diào)用。
CHECK_ZERO(j);k = i / j;如果 j為0,會打印出以上提示語。
總結(jié)
以上是生活随笔為你收集整理的嵌入式C语言代码的调试技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: keil for 51 汉字显示问题
- 下一篇: 基于单片机的简单的任务调度器