1 of 32

除錯

debug

2 of 32

在1947年9月9日,葛麗絲·霍普(Grace Hopper)發現了第一個電腦上的bug。當在Mark II電腦上工作時,整個團隊都搞不清楚為什麼電腦不能正常運作了。經過大家的深度挖掘,發現原來是一隻飛蛾意外飛入了一臺電腦內部而引起的故障。這個團隊把錯誤解除了,並在日誌本中記錄下了這一事件。也因此,人們逐漸開始用「Bug」(原意為「蟲子」)來稱呼電腦中的隱錯。現在在華盛頓的美國國家歷史博物館中還可以看到這個遺稿。

3 of 32

錯誤類型

語法錯誤:編譯器會發現,如少了分號,拼錯字等語法的錯誤

​

邏輯錯誤(語意錯誤):可以執行,但出來的和想的(要的)不一樣

​

執行錯誤(Runtime Error):執行時才發生的錯,如除以0、檔案

遺失、記憶體溢位等

4 of 32

語法錯誤

語法錯誤:

程式不合乎語法,使編譯器無法完成編譯

程式不會進入執行畫面,dev-C++會在底下顯示出錯誤訊息

撰寫程式初期最常出現的錯誤

5 of 32

常見語法錯誤

少了分號

6 of 32

常見語法錯誤

declared 宣告

b沒有宣告

7 of 32

常見語法錯誤

少了 using namespace std;

declared 宣告

8 of 32

常見語法錯誤

少了 #include<cstdlib>

或是不用 return EXIT_SUCCESS

改用return 0;

9 of 32

常見語法錯誤

10 of 32

邏輯錯誤

邏輯錯誤(語意錯誤) :

程式合乎語法,編譯器可以完成編譯

但程式的執行和所設想的不同

部份輸入資料結果正確,部份輸入資料結果錯誤

常見但有時不易解決的錯誤

11 of 32

常見邏輯錯誤

cin 後要用 >> 做區隔

12 of 32

常見邏輯錯誤

型態錯誤

輸入的資料可為浮點數

或是輸出資料可能為浮點數

卻宣告為整數

13 of 32

常見邏輯錯誤

變數b未給初值

出現的值無法預測,程式結果無法確定

14 of 32

常見邏輯錯誤

15 of 32

常見邏輯錯誤

執行將b內容指定給a

後執行 cout<<"="<<b;

a  b

5  5

5

a  b

2  5

5

16 of 32

常見邏輯錯誤

17 of 32

常見邏輯錯誤

==才對

條件成不成立都做同一件事

a既不是4的倍數,何需判斷是否為100的倍數

此題目標為閏年判斷

除了4和100還有400的倍數判斷

缺;

18 of 32

執行錯誤

執行錯誤(Runtime Error) :

因為執行過程中發生的狀況而有的錯誤,

如除以0、檔案遺失、記憶體溢位

會因為執行狀況而不同或不一定會發生

不容易找到的錯誤

19 of 32

常見執行錯誤

20 of 32

除錯工具(Dev-C++)

當程式編譯完沒有出現錯誤,但執行結果和預期不同時也就是有邏輯錯誤的情況下,想了解程式是如何運作,好找到bug,可使用dev-C++內建的除錯功能。

​

以逐步執行的方式,找到程式和自己預期之執行動作的不同處,或重新檢示自己的思考是否有盲點。

21 of 32

除錯工具(Dev-C++)

1.點一下行數

可設中斷點

可設在可能出錯

的地方或前一兩行

若沒設中斷點

程式會直接跑完

2.點選除錯

22 of 32

除錯工具(Dev-C++)

第一次使用除錯功能,會出現這樣的視窗

直接按Yes即可

23 of 32

除錯工具(Dev-C++)

藍色列會停在第一個中斷點,代表現在正要執行(還沒執行)的敘述,

按「逐行執行」會執行藍色列的敘述,而藍色列將往下一個將執行的敘述移動。

​

因為是cin,所以要到程式執行的視窗輸入資料才能繼續

24 of 32

除錯工具(Dev-C++)

若是沒有按「逐行執行」則輸入會看不到字,無法完成輸入

​

按了「逐行執行」後輸入的字就會再出現

25 of 32

除錯工具(Dev-C++)

由於輸入100,所以符合4的倍數,進入if的成立敘述

也符合100的倍數,所以再進入成立敘述

26 of 32

除錯工具(Dev-C++)

在輸出完後,到達程式的結尾

27 of 32

除錯工具(Dev-C++)-監看式

可利用監看式來看變數的變化

28 of 32

除錯工具(Dev-C++)-監看式

可除錯的頁籤看到監看的變數的值

​

宣告完還未給值

,所以內容不一定

​

繼續按「逐行執行」可以觀察其變化

29 of 32

除錯工具(Dev-C++)-監看式

30 of 32

除錯工具(Dev-C++)-監看式

31 of 32

除錯工具(Dev-C++)-監看式

32 of 32

除錯工具(Dev-C++)-監看式