C語(yǔ)言程序調(diào)試介紹_第1頁(yè)
C語(yǔ)言程序調(diào)試介紹_第2頁(yè)
C語(yǔ)言程序調(diào)試介紹_第3頁(yè)
C語(yǔ)言程序調(diào)試介紹_第4頁(yè)
C語(yǔ)言程序調(diào)試介紹_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、程序調(diào)試技巧1內(nèi)容摘要常見(jiàn)錯(cuò)誤分類常見(jiàn)錯(cuò)誤識(shí)別內(nèi)存泄露調(diào)試器介紹打印程序日志良好的編程習(xí)慣先進(jìn)的開(kāi)發(fā)方法2常見(jiàn)錯(cuò)誤分類語(yǔ)法錯(cuò)誤原因:程序書(shū)寫(xiě)不符合c語(yǔ)法規(guī)則發(fā)生時(shí)間:編譯或鏈接時(shí)除錯(cuò)難度:容易嚴(yán)重程度:非常嚴(yán)重示例:括號(hào)對(duì)齊,遺露分隔符,函數(shù)名書(shū)寫(xiě)錯(cuò)誤,隱式類型轉(zhuǎn)換錯(cuò)誤3常見(jiàn)錯(cuò)誤分類識(shí)別技巧1現(xiàn)象:“未定義的標(biāo)識(shí)符”“重定義標(biāo)識(shí)符”“未找到標(biāo)識(shí)符”“函數(shù)隱式聲明”問(wèn)題:1. 未定義變量2. 變量使用時(shí)寫(xiě)錯(cuò)名字3. 在一個(gè)作用域內(nèi)重新定義了變量4. 沒(méi)有包含頭文件4常見(jiàn)錯(cuò)誤分類識(shí)別技巧2現(xiàn)象:“未找到符號(hào)”原因:使用了庫(kù)函數(shù),鏈接時(shí)沒(méi)有加上所在的庫(kù)解決辦法: -lpthread -lm 識(shí)別技巧

2、3現(xiàn)象:“未找到程序結(jié)尾”“期望 或 ; “原因:丟了分隔符括號(hào)匹配() , 5常見(jiàn)錯(cuò)誤分類識(shí)別技巧4現(xiàn)象:“不能把類型轉(zhuǎn)換成類型”原因:函數(shù)調(diào)用時(shí),參數(shù)類型不對(duì)識(shí)別技巧5現(xiàn)象:各種莫名其妙可能原因:1.源代碼中有非法字符或不可見(jiàn)符號(hào) 2.宏定義可能有問(wèn)題 3.檢查注釋 4.源文件編碼格式6常見(jiàn)錯(cuò)誤分類編譯器第一個(gè)步驟:詞法分析和語(yǔ)法分析建立符號(hào)表內(nèi)部符號(hào):聲明時(shí)填入符號(hào)表,使用時(shí)查找外部符號(hào):鏈接時(shí)查找7常見(jiàn)錯(cuò)誤分類語(yǔ)義錯(cuò)誤原因:語(yǔ)法正確但沒(méi)有準(zhǔn)確表達(dá)開(kāi)發(fā)者的意圖發(fā)生時(shí)間:運(yùn)行時(shí)除錯(cuò)難度:較難嚴(yán)重程度:嚴(yán)重示例: if(i=0) /* if(i=0) 訪問(wèn)空指針,野指針 訪問(wèn)沒(méi)有正確打開(kāi)的資

3、源 死循環(huán) 數(shù)組下標(biāo)越界8常見(jiàn)錯(cuò)誤分類識(shí)別技巧6現(xiàn)象:程序崩潰,提示“段錯(cuò)誤”,“找不到”識(shí)別技巧7現(xiàn)象:選擇分支沒(méi)起作用或死循環(huán)解決辦法:調(diào)試9常見(jiàn)錯(cuò)誤分類邏輯錯(cuò)誤原因:編程思路有誤或方法考慮不周密發(fā)生時(shí)間:程序結(jié)束除錯(cuò)難度:很難嚴(yán)重程序:嚴(yán)重現(xiàn)象:運(yùn)行結(jié)果與預(yù)期不一致分析技巧:調(diào)試跟蹤算法對(duì)于死循環(huán),看循環(huán)判斷條件10內(nèi)存泄露原因:沒(méi)有釋放動(dòng)態(tài)分配的內(nèi)存或其它資源發(fā)生時(shí)間:隨時(shí)除錯(cuò)難度:超難識(shí)別技巧:無(wú)測(cè)試辦法:使用專用測(cè)試工具推薦方法:嘗試使用專用代碼掃描工具常用解決辦法:無(wú)11調(diào)試器介紹幫助程序員發(fā)現(xiàn)隱藏錯(cuò)誤幫助閱讀理解代碼:大工程,ooGDB(Gnu 除錯(cuò)器)結(jié)合IDE(eclips

4、e)演示單機(jī)調(diào)試在線調(diào)試多進(jìn)程多線程調(diào)試12調(diào)試器介紹GDB使用gcc -g -o hello hello.c /*elf 文件格式*/gdb hellostart arg1 arg2 arg 3step(s) 單步進(jìn)入next(n) 單步跳過(guò)finish 運(yùn)行到函數(shù)結(jié)尾continue(c) 繼續(xù)執(zhí)行,直到斷點(diǎn)symbol 從一個(gè)文件內(nèi)部加載符號(hào)13調(diào)試器介紹print expression 打印表達(dá)式的值 set variable = expression 修改變量值display expression 每次程序停下來(lái)后都顯示值undisplay取消上一次顯示設(shè)置14調(diào)試器介紹backtr

5、ace顯示棧楨,程序崩潰時(shí)看調(diào)用棧info args顯示當(dāng)前棧楨上參數(shù)info locals 顯示當(dāng)前棧楨上局部變量list 顯示源代碼list linenumlist function 15調(diào)試器介紹info break 查看斷點(diǎn)的信息break funtion 在函數(shù)入口下斷點(diǎn)break linenumber 在當(dāng)前文件某行下斷點(diǎn)break 在文件某行下斷點(diǎn)disable breaknum 使不能某個(gè)斷點(diǎn)enable breaknum 使能某個(gè)斷點(diǎn)commands breaknum 當(dāng)?shù)侥硞€(gè)斷點(diǎn)時(shí)執(zhí)行一個(gè)命令16打印日志最簡(jiǎn)單 最笨 用處最廣泛大型工程項(xiàng)目所必須的內(nèi)容在程序里用宏控制日志,打印出關(guān)鍵的變量值if(DEBUG)printf(“.”多線程環(huán)境下可能會(huì)失效舉例:多線程競(jìng)爭(zhēng)17良好編程習(xí)慣幫助我們規(guī)避bug, 消除風(fēng)險(xiǎn)空指針判斷指針定義時(shí)和不用時(shí)置空數(shù)組下標(biāo)使用前,判斷是否越界總是顯式的進(jìn)行類型轉(zhuǎn)換嚴(yán)格的括號(hào)匹配 if(a0) & (a10) 在程序的各個(gè)出口處 free(p); 盡管p可能

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論