9.1 啟動除錯器
我們將基於 PyCharm 來學習除錯過程,這是很有道理且愉快的選擇。 現在你馬上就會了解。
在 PyCharm 中可以以兩種模式運行你的程序:
| 程序運行模式 | 工具欄圖示 | 快捷鍵 |
|---|---|---|
| 正常執行 | |
Shift+F10 |
| 除錯模式運行 | |
Shift+F9 |
你應該對正常模式很熟悉:程式會啟動,執行並結束。但除錯模式會給你帶來不少驚喜。
除錯模式
除錯模式允許你逐步執行整個程式。或者更準確地說, 逐行:一行一行地執行。這樣你可以在程式的每一步(每執行一行代碼後)觀察變數的值。甚至可以改變它們的值!
為了掌握除錯程序的技巧,你需要了解三件事:
- 停止點
- 逐步執行
- 檢視變數的值
9.2 停止點 (Break Points)
IDE 允許你在代碼中設置特別的標記——停止點 (break point)。每當除錯模式下運行的程式達到被標記為 break point 的行時,它將會暫停。
在特定的行設置 break point,只需在 PyCharm 中點擊該行的左側。示例:
結果是該行將被標記為停止點 (break point),PyCharm 會將整行顯示為紅色:
左側面板再點擊一次即可移除設置的 break point。
也可以在當前的行使用快捷鍵來簡單設置 break point——Ctrl+F8。如果該行已經有 break point,再次按下 Ctrl+F8 會刪除它。
9.3 除錯模式下運行程序
如果你的程式中有至少一個停止點,你可以啟動程式的除錯模式(Shift+F9 或「蟲子圖示」)。
在除錯模式下運行後,程式會正常執行。但是一旦程式到達被標記為 break point 的行時,它將會暫停。示例:
在螢幕上方,你可以看到程式碼中有兩個停止點。程式停在了第 2 行——被藍線標記。第 2 行尚未執行:目前還沒有輸出到控制台。
在螢幕下方,你可以看到除錯器的面板:Thread & variables面板、Console(屏幕輸出),還有除錯模式的按鈕。
如果你想取消程式的暫停(繼續執行),可以按左下方面板的 Resume Program 按鈕(或按 F9 鍵)。
按下該按鈕(或 F9)後,程式將繼續運行,直到遇到下一個停止點或者程式結束。按下按鈕後,我們將看到這樣的場景:
程式停在了第二個停止點,而控制台輸出了 "Hello" 和 "and"——這表明三行輸出中只有兩行已執行。
9.4 逐步執行
如果你的程式正在除錯模式下運行,你也可以逐步執行它:一步一步,一條行為單位。對於逐步執行有兩個快捷鍵:F7 和 F8:每個都會導致執行當前的代碼行。但首先你需要設置 break point 來暫停你的程式。
如果你想逐行執行程式,則需要在程式的第一行代碼設置 break point,並在除錯模式下運行它。
當程式暫停後,你可以開始逐行執行。按下一次 F8 鍵就會執行一行。
當程式暫停並按下一次 F8 鍵後,我們的程式看起來像這樣:
第一行——print("Hello")——已執行,目前是第二行。你也可以在截圖的下半部分看到,螢幕已經輸出了 "Hello"。
9.5 逐步執行進入函數
如果程式中有你自定義的函數,並且你希望在除錯模式下程式不僅逐步執行,還能進入你的函數,那麼要「進入函數」,你需要按的不是 F8,而是 F7。
假設你正在程序的第 5 行逐步執行。如果按下 F8,PyCharm 只會執行第五行並移至第六行。
但如果按下 F7,PyCharm 將會逐步執行 hello() 函數:
非常簡單。如果你對方法內部發生的事情不太在意,就按 F8;如果你在意,就按 F7 並逐步執行整個代碼。
GO TO FULL VERSION