嵌入式C语言代码的调试技巧
生活随笔
收集整理的這篇文章主要介紹了
嵌入式C语言代码的调试技巧
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載自 https://www.cnblogs.com/gongxing/p/6170111.html
在項目開發的過程中,不可避免的會遇到調試代碼的情況。
剛開始寫代碼時,我們想看具體執行到哪兒時,往往這么寫:
printf("***** Code is here! *****\n");
隨著調試信息的不斷增多,我們項目中的printf()函數到處都是,因此,當調試完成時,發現需要注釋掉所有的調試代碼將非常痛苦。于是,我們通過宏定義對代碼進行了這樣的改造:
//首先,定義調試宏:#define _DEBUG_IS_MY//然后,在需要添加調試代碼的地方,添加以下代碼:#ifdef _DEBUG_IS_MYprintf("***** Code is here! *****\r\n");#endif這樣,似乎解決了問題,但這會使項目代碼顯得很臃腫,并且太多重復代碼(#ifdef _DEBUG_IS_MY ……#endif),這是程序員不能容忍的。
因此,參考很多底層代碼和網絡資料,看到確實已經有很優秀和成熟的寫法:
/* * 自定義調試宏。 * 1.快速切換debug版本和relese版本工程 * 2.簡化打印調試語句的編寫,提高開發調試效率 */ /* debug 調試宏定義 */ #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//在程序中需要添加調試代碼處,直接調用: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宏應該在除法運算前被調用。
CHECK_ZERO(j);k = i / j;如果 j為0,會打印出以上提示語。
總結
以上是生活随笔為你收集整理的嵌入式C语言代码的调试技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: keil for 51 汉字显示问题
- 下一篇: 基于单片机的简单的任务调度器