程式除錯

Python SELF TW
等級 18 , 課堂 2
開放

8.1 Bug 的出現

程式除錯是一個尋找與修正程式錯誤或 bug 的過程。這個過程是軟體開發中最有趣且重要的部分之一,能幫助確保程式的正確運行。

"bug" 這個詞的歷史

"bug" 這個詞在電腦程式的上下文中首次使用是在 1940 年代。儘管"bug"的概念早在電腦出現之前就已存在,用來描述各種裝置中的機械故障。

"bug" 在電腦技術中首次被紀錄的使用是在 1947 (!) 年,當時一個小組在哈佛大學的 Mark II 電腦上工作。他們發現其中一個繼電器停止工作,因為有一只蛾卡住了。他們移除了這只昆蟲,並將其紀錄為"第一次發現真實的昆蟲" (literal bug)。

儘管這不是第一次用"bug"來表示錯誤,這個事件卻因而聞名,推廣了"bug"這個詞的使用。

程式除錯

除錯是尋找、診斷並修正軟體中 bug 的過程。除錯過程包括幾個階段:

  • 發現錯誤: 確定指出程式中存在錯誤的症狀。
  • 重現錯誤: 創造條件讓錯誤再次出現,好更好地理解其本質。
  • 診斷問題: 使用各種工具和方法來分析代碼並尋找錯誤的原因。
  • 修正錯誤: 對代碼進行修改以排除錯誤。
  • 測試: 驗證修正並測試程式,確保錯誤已排除且沒有出現新的問題。

所以 bug 是程式中任何錯誤的一般稱呼,而除錯則是發現並修正這些錯誤的過程。

8.2 除錯工具與方法

Logging

在程式碼中加入 log 可以追蹤程式的執行,以及獲得程序中變數和操作狀態的信息。在 Python 中有很棒的庫來進行 Logging,就是 logging

Logging 的使用範例:


import logging

# 設定 logging 來輸出除錯信息
logging.basicConfig(level=logging.DEBUG)
            

def divide(a, b):
    # Logging 除法嘗試
    logging.debug(f"分割 {a} 到 {b}")
    if b == 0:
        # Logging 錯誤,如果 b 為 0
        logging.error("嘗試除以零!")
        return None

    # 如果 b 不為 0,則執行分割
    return a / b
            
result = divide(10, 2)
print(result)

使用除錯器 (Debuggers)

除錯器是一種工具,可以讓開發者逐步執行程式、設置斷點 (breakpoints),檢查變數的值並在程式執行時更改它們。

受歡迎的除錯器有:

  1. GDB: 用於 C, C++ 等程式語言的 GNU Debugger。
  2. PDB: 內建的 Python 除錯器。
  3. Visual Studio Debugger: 內建於 Microsoft Visual Studio 的除錯器。
  4. PyCharm Debugger: 內建於 PyCharm IDE 的 Python 除錯器。

PDB 的使用範例


import pdb

def faulty_function(a, b):
    pdb.set_trace()  # 設置斷點
    result = a / b
    return result
            
faulty_function(10, 0)

當程式達到 pdb.set_trace(),它會停下來,你可以執行除錯命令,例如 next (下一步)、print (打印變量值) 和其他命令。

我們會在接下來的課程中學習使用 PyCharm 內建的除錯器進行程式除錯。

8.3 使用 debug

總的來說,debug 包含積極使用除錯工具和實踐來發現和修復錯誤。

設置斷點: 在程式碼中設置斷點以在你感興趣的地方停止程式的執行。

逐步執行: 逐步執行程式以觀察程式狀態和變量值的變化。

分析變量: 在程式執行的不同階段分析變量和表達式的值,以發現不正確的數據或邏輯錯誤。

修正錯誤: 修改代碼以排除找到的錯誤。

重測試: 修正錯誤後進行程式測試,確保錯誤已排除且沒有新問題產生。

看起來很簡單,是吧?我們會在下一堂課中詳細走過每個步驟 :)

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