程式偵錯

Frontend SELF TW
等級 38 , 課堂 2
開放

9.1 錯誤的出現

程式偵錯是尋找和修正程式中錯誤或bugs的過程。這可是軟體開發中最有趣的部分,因為能確保程式正確運行。

"bug"這個詞的歷史

"bug" (錯誤) 這個詞在電腦程式的語境中最早於1940年代開始使用。即便如此,"bugs"這個概念在電腦出現前就已經存在,用來描述各種裝置的機械故障。

第一次有文獻記載的"bug"用於電腦科學是在1947年(!),一支在哈佛大學處理Mark II電腦的團隊發現當時機器的一個繼電器因為有蛾子進入而失效。他們移除了那隻昆蟲,並記錄下來作為"發現真正bug的第一個實例"(literal bug)。

雖然這不是第一次用"bug"來指代錯誤,但這次事件讓這個詞變得廣為人知並促進了其普及。

bug

程式偵錯

偵錯是尋找、診斷和修正程式錯誤的過程。偵錯過程包括幾個階段:

  1. 錯誤發現: 確定顯示程式有錯誤的症狀。
  2. 錯誤重現: 創建錯誤再次出現的情境以便更好地了解其性質。
  3. 問題診斷: 使用各種工具和方法分析代碼,找出錯誤的原因。
  4. 錯誤修正: 修改代碼以消除錯誤。
  5. 測試: 驗證修正並測試程式,以確保錯誤被消除,且沒有引發其他問題。

所以 bug 就是對程式中的任何錯誤的統稱,而 de-bug 是發現並消除這些錯誤的過程。

9.2 偵錯工具和方法

日誌記錄(Logging)

在程式碼中加入日誌,能讓你追蹤程式執行並在不同階段獲得變量和操作的狀態信息。對於JavaScript的日誌記錄,有個不錯的庫—winston。

日誌記錄的使用範例:

JavaScript
    
      const { createLogger, format, transports } = require('winston');

      // 創建偵錯等級的記錄器
      const logger = createLogger({  level: 'debug' });

      // 除法函數
      function divide(a, b) {
        logger.debug(`除法 ${a} 除以 ${b}`);
        if (b === 0) {
          logger.error("嘗試除以零!");
          return null;
        }
        return a / b;
      }

      // 使用函數的範例
      const result = divide(10, 2);
      console.log(result); // 輸出: 5
    
  

使用偵錯器 (Debuggers)

偵錯器是一種工具,讓開發者可以逐步執行程式,設置停留點 (breakpoints),檢查和修改執行時的變量值。

JavaScript 的熱門偵錯器:

  • Chrome DevTools: 在 Google Chrome 瀏覽器中內建的偵錯器
  • Firefox Developer Tools: 在 Mozilla Firefox 瀏覽器中內建的偵錯器
  • Node.js Debugger: Node.js 中的伺服器端 JavaScript 偵錯器
  • Visual Studio Code Debugger: 內建於 Visual Studio Code 編輯器中的偵錯器

在 Node.js 中使用偵錯器的範例:

JavaScript
    
      // 引入內建的util模塊
      const { inspect } = require('util');

      // 錯誤函數範例
      function faultyFunction(a, b) {
        debugger; // 設置停留點
        let result = a / b;
        return result;
      }

      // 呼叫有錯誤的函數
      console.log(faultyFunction(10, 0));
    
  

當程式到達 debugger 時,它會暫停,你可以使用偵錯器的命令,比如逐步前進 (step over)、進入 (step into)、退出 (step out),以及檢查變量值等。

我們會在 Intellij IDEA 中學習用偵錯器來debug程式 (需要 Ultimate Edition 版本)。

9.3 使用 debug

debug 一般來說就是使用偵錯工具和技巧來發現和解決錯誤。

偵錯步驟:

  1. 設置停留點: 在程式碼中設置停留點來暫停程式在你感興趣的地方。
  2. 逐步執行: 當步執行程式,觀察程式狀態和變量值的改變。
  3. 分析變量: 驗證程式不同階段變量和表達式的值,以識別不正確的數據或邏輯錯誤。
  4. 修正錯誤: 修改代碼來消除找到的錯誤。
  5. 再次測試: 錯誤修正後,測試程式以確保錯誤被修正且沒有新問題出現。

看起來很簡單吧?在下一講中我們會詳細探討每個步驟 :)

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION