除錯
debug
在1947年9月9日,葛麗絲·霍普(Grace Hopper)發現了第一個電腦上的bug。當在Mark II電腦上工作時,整個團隊都搞不清楚為什麼電腦不能正常運作了。經過大家的深度挖掘,發現原來是一隻飛蛾意外飛入了一臺電腦內部而引起的故障。這個團隊把錯誤解除了,並在日誌本中記錄下了這一事件。也因此,人們逐漸開始用「Bug」(原意為「蟲子」)來稱呼電腦中的隱錯。現在在華盛頓的美國國家歷史博物館中還可以看到這個遺稿。
錯誤類型
語法錯誤:編譯器會發現,如少了分號,拼錯字等語法的錯誤
邏輯錯誤(語意錯誤):可以執行,但出來的和想的(要的)不一樣
執行錯誤(Runtime Error):執行時才發生的錯,如除以0、檔案
遺失、記憶體溢位等
語法錯誤
語法錯誤:
程式不合乎語法,使編譯器無法完成編譯
程式不會進入執行畫面,dev-C++會在底下顯示出錯誤訊息
撰寫程式初期最常出現的錯誤
常見語法錯誤
少了分號
常見語法錯誤
declared 宣告
b沒有宣告
常見語法錯誤
少了 using namespace std;
declared 宣告
常見語法錯誤
少了 #include<cstdlib>
或是不用 return EXIT_SUCCESS
改用return 0;
常見語法錯誤
邏輯錯誤
邏輯錯誤(語意錯誤) :
程式合乎語法,編譯器可以完成編譯
但程式的執行和所設想的不同
部份輸入資料結果正確,部份輸入資料結果錯誤
常見但有時不易解決的錯誤
常見邏輯錯誤
cin 後要用 >> 做區隔
常見邏輯錯誤
型態錯誤
輸入的資料可為浮點數
或是輸出資料可能為浮點數
卻宣告為整數
常見邏輯錯誤
變數b未給初值
出現的值無法預測,程式結果無法確定
常見邏輯錯誤
常見邏輯錯誤
執行將b內容指定給a
後執行 cout<<"="<<b;
a b
5 5
5
a b
2 5
5
常見邏輯錯誤
常見邏輯錯誤
==才對
條件成不成立都做同一件事
a既不是4的倍數,何需判斷是否為100的倍數
此題目標為閏年判斷
除了4和100還有400的倍數判斷
缺;
執行錯誤
執行錯誤(Runtime Error) :
因為執行過程中發生的狀況而有的錯誤,
如除以0、檔案遺失、記憶體溢位
會因為執行狀況而不同或不一定會發生
不容易找到的錯誤
常見執行錯誤
除錯工具(Dev-C++)
當程式編譯完沒有出現錯誤,但執行結果和預期不同時也就是有邏輯錯誤的情況下,想了解程式是如何運作,好找到bug,可使用dev-C++內建的除錯功能。
以逐步執行的方式,找到程式和自己預期之執行動作的不同處,或重新檢示自己的思考是否有盲點。
除錯工具(Dev-C++)
1.點一下行數
可設中斷點
可設在可能出錯
的地方或前一兩行
若沒設中斷點
程式會直接跑完
2.點選除錯
除錯工具(Dev-C++)
第一次使用除錯功能,會出現這樣的視窗
直接按Yes即可
除錯工具(Dev-C++)
藍色列會停在第一個中斷點,代表現在正要執行(還沒執行)的敘述,
按「逐行執行」會執行藍色列的敘述,而藍色列將往下一個將執行的敘述移動。
因為是cin,所以要到程式執行的視窗輸入資料才能繼續
除錯工具(Dev-C++)
若是沒有按「逐行執行」則輸入會看不到字,無法完成輸入
按了「逐行執行」後輸入的字就會再出現
除錯工具(Dev-C++)
由於輸入100,所以符合4的倍數,進入if的成立敘述
也符合100的倍數,所以再進入成立敘述
除錯工具(Dev-C++)
在輸出完後,到達程式的結尾
除錯工具(Dev-C++)-監看式
可利用監看式來看變數的變化
除錯工具(Dev-C++)-監看式
可除錯的頁籤看到監看的變數的值
宣告完還未給值
,所以內容不一定
繼續按「逐行執行」可以觀察其變化
除錯工具(Dev-C++)-監看式
除錯工具(Dev-C++)-監看式
除錯工具(Dev-C++)-監看式
除錯工具(Dev-C++)-監看式