版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、程序改錯,2,程序改錯,是個大悲大喜的過程,一天之內(nèi)可以讓人在悲傷的低谷和喜悅的巔峰之間跌宕起伏。 如果改過了成千上萬個錯誤, 改錯很像偵破案件,有壞事發(fā)生了,而僅有的信息是它的確發(fā)生了。 必須從結(jié)果出發(fā),逆向思考,3,程序改錯,改錯的第一步是找出錯誤的根源,然后對癥下藥 尋找錯誤根源的過程稱為調(diào)試。,4,程序改錯,難點(diǎn)在于: 癥狀和根源可能相隔很遠(yuǎn) 有人問阿凡提:“我肚子疼,該用什么藥?” 癥狀可能在另一個錯誤被糾正后暫時消失 癥狀并不是某個程序錯誤引發(fā)的,如誤差累積 癥狀可能時隱時現(xiàn),如“內(nèi)存泄露” 很難產(chǎn)生完全一樣的輸入條件,難以恢復(fù)“錯誤的現(xiàn)場”,5,程序中常見的出錯原因,編譯錯誤 指
2、在編譯過程中發(fā)現(xiàn)的錯誤,通常屬于語法錯誤,即編寫的語句不符合C語言的語法規(guī)則。 Undefined symbol xxx 標(biāo)識符xxx未定義 Expression syntax error 表達(dá)式語法錯誤 Too few parameter in call 函數(shù)調(diào)用時的實(shí)參少于函數(shù)的形參,6,程序中常見的出錯原因,運(yùn)行錯誤 指在程序運(yùn)行時發(fā)生的錯誤 往往是由于語義上的錯誤造成的,即語句雖然合乎語法,但要求計算機(jī)去做不該做或做不到的事情。 例如當(dāng)用0做除數(shù)時,運(yùn)行后將顯示“Division by zero”錯誤提示信息,并立即返回編輯屏幕。查看運(yùn)行結(jié)果時,可在User screen(用戶屏幕)上
3、看到給出的錯誤提示信息。,7,邏輯錯誤 程序中有邏輯錯時,不影響程序運(yùn)行并得到運(yùn)行結(jié)果,只是運(yùn)行結(jié)果不正確。比較隱蔽,出錯后不易查找。 累加求和運(yùn)算時,累加和變量忘記了賦初值; 累乘運(yùn)算時,累乘變量初值賦值為0; 函數(shù)聲明時的返回值數(shù)據(jù)類型與實(shí)際返回的數(shù)據(jù)類型不一致,導(dǎo)致自動類型轉(zhuǎn)換 數(shù)組下標(biāo)越界(即超出了定義的范圍); 程序中存在死循環(huán);,程序中常見的出錯原因,8,程序改錯,在程序設(shè)計語言的發(fā)展中,一個重要的努力方向就是想通過語言特征的設(shè)計幫助避免錯誤 如下標(biāo)范圍檢查,受限制的指針甚至完全取消指針,內(nèi)存回收,強(qiáng)類型檢查 但沒有任何語言能防止我們犯錯誤,每個為預(yù)防某些問題而設(shè)置的語言特征都會帶
4、給它自身額外的代價 作為程序員應(yīng)知道所用語言中有潛在危險和引起錯誤傾向的那些語言特征 如goto語句,全局變量,無限制的指針,自動類型轉(zhuǎn)換 世界上最好的調(diào)試工具是那些有經(jīng)驗的人,9,調(diào)試的基本方法,“粗分細(xì)找” 定位大致的范圍:歸納、推理、二分、排除 縮減輸入數(shù)據(jù) 設(shè)法找到能導(dǎo)致失敗的最小輸入 采用注釋的辦法切掉一些代碼 減少有關(guān)的代碼區(qū)域,調(diào)試無誤后再將它們打開注釋,即采用分而治之的策略將問題局部化 利用調(diào)試工具 逐條語句跟蹤 插入打印語句 觀看屏幕輸出結(jié)果,10,錯誤案例,關(guān)系運(yùn)算符= 錯寫成 賦值運(yùn)算符= if (a = b) printf(yes); /*運(yùn)行結(jié)果錯誤*/ Warnin
5、g:Possibly incorrect assignment in function main if (a = b) printf(yes); /*正確*/ = 表示賦值操作 = 表示比較是否相等的操作,11,錯誤案例,while后面有分號 while (n 100); n+; 循環(huán)體為空語句,導(dǎo)致死循環(huán) for后的表達(dá)式2省略 for (n=1; ;n+) /*死循環(huán)*/,12,錯誤案例,判斷字符是大寫字符或者小寫字符 (a =a int sum; sum = a + b; TC下編譯,不提示任何錯誤 VC下編譯 warning C4244: = : conversion from dou
6、ble to int , possible loss of data,14,錯誤案例,函數(shù)聲明時的返回值類型與實(shí)際返回的數(shù)據(jù)類型不一致,導(dǎo)致自動類型轉(zhuǎn)換 double Add(double a, double b) int sum; return sum; 不提示任何錯誤 int Add(double a, double b) double sum; return sum; warning C4244: return : conversion from double to int , possible loss of data,15,錯誤案例,#include stdio.h #include
7、 math.h int main() int a=4,b=8,c; c=sqrt(a); printf(%d %dn,c,b); printf(%d %dn,(int)sqrt(a),b); printf(%f %dn,sqrt(a),b); printf(%d %dn,sqrt(a),b); return 0; ,16,錯誤案例,數(shù)組下標(biāo)越界 int a10,i,sum; for (i=1; i=10; i+) sum = sum + ai; 不提示任何錯誤,或者提示W(wǎng)ritten、read之類信息,17,關(guān)于代碼風(fēng)格問題,縮進(jìn)(indent)保證代碼整潔、層次清晰的主要手段,int isp
8、rime(int n) int k,i; k=sqrt(double)n); for (i=2;i=k;i+) if(n%i=0) return 0; return 1; ,#include int main() int i; for (i=2;i100;i+) if(isprime(i) printf(%dt,i); return 0; ,18,關(guān)于代碼風(fēng)格問題,良好風(fēng)格的程序應(yīng)嚴(yán)格采用梯形層次對應(yīng)好各層次,int isprime(int n) int k, i; k = sqrt(double)n); for (i=2; i=k; i+) if (n % i = 0) return 0; return 1; ,#include int main() int i; for (i=2; i100; i+) if (isprime(i) printf(%dt,i); return 0; ,19,程序版式,現(xiàn)在的許多開發(fā)環(huán)境
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 腦血管疾病患者的營養(yǎng)支持與飲食護(hù)理
- 湖南省懷化市洪江市部分校2025-2026學(xué)年九年級上學(xué)期期中語文試題(含答案)(含解析)
- 2025-2030中國餐廚垃圾處理行業(yè)經(jīng)營模式與發(fā)展前景規(guī)劃研究研究報告
- 供電管理各項制度
- 二級集團(tuán)公司內(nèi)部借款制度
- 2024餐飲公司40周年慶典活動策劃方案
- 2025-2030細(xì)胞治療產(chǎn)品商業(yè)化生產(chǎn)瓶頸與解決方案報告
- 2025-2030細(xì)胞治療產(chǎn)品臨床試驗設(shè)計優(yōu)化與審批提速分析報告
- 2025-2030細(xì)胞治療CDMO產(chǎn)業(yè)臨床轉(zhuǎn)化效率監(jiān)管框架及生產(chǎn)工藝評估報告
- 2025-2030細(xì)胞培養(yǎng)肉監(jiān)管法規(guī)進(jìn)展與生產(chǎn)成本下降路徑預(yù)測
- 交通運(yùn)輸安全檢查與處理規(guī)范(標(biāo)準(zhǔn)版)
- UCL介紹教學(xué)課件
- 木工電鋸使用規(guī)范制度
- 骨科跟骨骨折課件
- 2026年美團(tuán)商業(yè)分析師崗位筆試解析與面試問答技巧
- 某高校十五五教育大數(shù)據(jù)治理中心與智慧校園支撐平臺建設(shè)方案
- 2026年山西警官職業(yè)學(xué)院單招綜合素質(zhì)考試備考試題帶答案解析
- 汽修廠文件檔案歸檔制度
- 高??蒲许椖苛㈨椉肮芾硪?guī)范
- 2026年工業(yè)數(shù)字化能碳管理項目可行性研究報告
- 《事故隱患排查治理資金使用專項制度》
評論
0/150
提交評論