【正文】
鏈接目標(biāo)文件和庫(kù)函數(shù)為可執(zhí)行文件,如無(wú)目標(biāo)文件則先生成 清潔:刪掉 debug或者 release版本的所有中間文件和可執(zhí)行文件 調(diào)試 單步執(zhí)行( F10):?jiǎn)尾綀?zhí)行,遇到函數(shù)調(diào)用時(shí)把其當(dāng)作一條語(yǔ)句執(zhí)行 深入函數(shù)的單步執(zhí)行( F11):?jiǎn)尾綀?zhí)行,遇到函數(shù)調(diào)用是深入到其內(nèi)部 執(zhí)行到光標(biāo)處( ctrl+F10):一次執(zhí)行完光標(biāo)前的所有語(yǔ)句,并停到光標(biāo)處 跳出( shift+F11):執(zhí)行完當(dāng)前函數(shù)的所有剩余代碼,并從函數(shù)跳出 重新開(kāi)始調(diào)試( ctrl+shift+F5):重新開(kāi)始調(diào)試過(guò)程 結(jié)束調(diào)試( shift+F5):執(zhí)行完程序的剩余部分,結(jié)束調(diào)試 設(shè)置 /取消斷點(diǎn)( F9):在某一行設(shè)置和取消斷點(diǎn) 當(dāng)前執(zhí)行的語(yǔ)句 堆棧的內(nèi)容:函數(shù)調(diào)用關(guān)系 從這里可以 查看內(nèi)存數(shù)據(jù) 程序執(zhí)行過(guò)程中的一 些變量會(huì)顯示在這里 著名的 watch窗口:看變量 表達(dá)式、地址等各種信息 寄存器當(dāng)前值 二、調(diào)試方法 樹(shù)立正確的編程方法論 ? 沒(méi)有解決不了的問(wèn)題,樹(shù)立編程信心 ? 按照正確的方法來(lái)編程 –從實(shí)踐中體會(huì)解決問(wèn)題的思路、編程的思想 –熟練掌握語(yǔ)法,數(shù)據(jù)結(jié)構(gòu),算法、模式,底層環(huán)境 –按照編程規(guī)范來(lái)編寫(xiě)代碼 –充分利用各種資源: ?調(diào)試器 ? msdn ?網(wǎng)絡(luò)搜索引擎 常用調(diào)試手段 1. 利用編譯器的輸出信息排除錯(cuò)誤 2. 利用調(diào)試器的調(diào)試功能 單步、 run to cursor、斷點(diǎn)、條件斷點(diǎn)、查看堆棧、 利用 watch窗口查看變量、表達(dá)式的值 3. 分段調(diào)試法、增量調(diào)試法 4. 利用 flush人為刷新緩沖區(qū) 5. 修改輸出信息,增加標(biāo)志位 6. 利用輸出語(yǔ)句打印調(diào)試信息 7. 通過(guò)堆棧觀察函數(shù)調(diào)用情況 8. 綜合程序調(diào)試方法 9. 注釋的技巧、條件編譯 幾個(gè)簡(jiǎn)單例子 include include void main() { coutsetw(10)十進(jìn)制 setw(10)二進(jìn)制 setw(10)八進(jìn)制“ setw(10)十六進(jìn)制 endl。i=156。 int d。for(int j=128。j/=2){if(d/j==1) cout1。d=d%j。 }} 一個(gè)編程風(fēng)格非常糟糕的例子: /*FILE COMMENT*********************************************************** * System Name : for eduction (NO TRANSFERRING) * File Name : * Contents : embedded C language entrance course * : exercise 5B: program using pointer * : 乮 pass onedimensional array to function) * Model : for OAKS8LCD Board * CPU : R8C/Tiny series * Compiler : NC30WA( Release 1) * OS : not be used * Programmer : RENESAS Semiconductor Training Center * Note : for OAKS8R5F21114FP(R8C/11 group,20MHz) **************************************************************************** * COPYRIGHT(C) 2022 RENESAS TECHNOLOGY CORPORATION * AND RENESAS SOLUTIONS CORPORATION ALL RIGHTS RESERVED **************************************************************************** * History : *FILE COMMENT END*******************************************************/ /* include file */ include /* define mon symbol */ include /* for function to deal with OAKS8LCDBoard peripheral */ /* define function prototype */ int main(void)。 /* input string */ static int get_strlength(unsigned char *str)。 /* display decimal number in LCD */ /*FUNC COMMENT************************************************************* * ID : * function name : main * function : call function to get string length, display result * parameter : none * return : result 0:normal end * function used : get_strlength * notice : none * History : *FUNC COMMENT END********************************************************/ int main(void) { unsigned char buff[10+1]。 /* define variable for save number of character */ while(1){ /* input string from key matrix */ get_string(Str=, buff)。 /* display string length in LCD */ print_dec(Len=, count)。 } /*FUNC COMMENT************************************************************* * ID : * function name : get_string * function : input string from key matrix * parameter : message:pointer to input waiting message * : buff :pointer to space saving string input * return : none * function used : none * notice : none * History : *FUNC COMMENT END********************************************************/ static void get_string(unsigned char *message, unsigned char *buff) /* define function to input string */