設(shè)置調(diào)試斷點與配置調(diào)試器
前面兩節(jié)一直在介紹如何在 PyCharm 里直接運(yùn)行程序,但實際學(xué)習(xí)工作過程中, 寫完代碼很少一次就能運(yùn)行成功,需要通過不斷調(diào)試,最終使程序能成功執(zhí)行,本節(jié)開始介紹與調(diào)試相關(guān)的功能,本節(jié)的重點是配置調(diào)試器與如何設(shè)置斷點。
1. 配置調(diào)試器
在前面章節(jié),我們?yōu)轫椖颗渲昧硕鄠€運(yùn)行配置,對于這些已存在的配置,可以通過按 ??F9
(Ctrl + Shift + F9) 直接進(jìn)入調(diào)試模式。但通常我們在調(diào)試前還需要配置調(diào)試器,主要包括通用 Debugger 與 Python Debugger:
1. 主菜單: PyCharm/File -> Preference/Settings -> Build, Execution, Delopyment -> Debugger
, 下面列出各選項的解釋,可根據(jù)需要進(jìn)行設(shè)置。
2. 主菜單: PyCharm/File -> Preference/Settings -> Build, Execution, Delopyment -> Python Debugger
,通常使用默認(rèn)設(shè)置即可,不需要更改。除非你的程序使用了PyQt 或者 Gevent
2. 斷點
斷點是源代碼標(biāo)記,可以在特定點暫停程序執(zhí)行并檢查其行為。設(shè)置后,斷點將保留在項目中,直到顯式刪除它。斷點分為行斷點與異常斷點。
設(shè)斷點最直接的方式是在編輯器中,點擊需要設(shè)置斷點的代碼行左側(cè)邊欄或者按 ? F8 (Ctrl + F8) 就設(shè)置了行斷點,然后在左側(cè)邊欄出現(xiàn)紅色的圓點圖標(biāo)。
2.1 查看/編輯斷點
1. 主菜單 Run -> View Breakpoints
, 或者按 ?? F8
(Ctrl + Shift + F8),可以查看當(dāng)前項目所有斷點。
Tips: 斷點雖然有多個屬性,最常用的也就前兩項,所以通常使用默認(rèn)就可以了。其余屬性做為一般了解。
2. 在編輯器內(nèi), 右鍵點擊斷點圖標(biāo),可以查看與編輯單個斷點的屬性。
3. 使斷點失效, 使上面的屬性 “Enabled” 不選中即可,失效的斷點圖標(biāo)是空心紅色圓。
2.2 創(chuàng)建行斷點
在可執(zhí)行代碼行上設(shè)置行斷點,在執(zhí)行該斷點以前,線程執(zhí)行將被掛起,PyCharm 顯示該線程堆棧上的堆棧幀。
在編輯器中,點擊需要設(shè)置斷點的代碼行左側(cè)邊欄或者按 ? F8
(Ctrl + F8) 就設(shè)置了行斷點。
Tips: 如果想移除斷點,只需點擊斷點圖標(biāo)就可以了,移除斷點的方法是在 Debugger 中設(shè)置的。
除此以外,如果按 ? ?? F8
(Ctrl + Alt + Shift + F8) 設(shè)置了臨時斷點,斷點將在命中后從項目中刪除,也就是說臨時斷點只使用一次。也可以通過設(shè)置斷點屬性 “Remove once hit” 創(chuàng)建臨時斷點。
Tips: 臨時斷點圖標(biāo)與普通斷點是一樣的,沒執(zhí)行調(diào)試前是沒辦法直接區(qū)分的,只是在調(diào)試過程中,臨時斷點被擊中后,就自動移除了。
2.2 創(chuàng)建異常斷點
PyCharm 為 Python、Django、Jinja2 和 JavaScript 提供異常斷點。當(dāng)引發(fā)指定的異常時觸發(fā)異常斷點。它們?nèi)謶?yīng)用于異常條件,不需要特定的源代碼引用。
主菜單 Run -> View Breakpoints
, 點擊 + 按鈕, 選擇 Python Exception Breakpoint。
在"Select Exception Class"對話框中,指定庫或項目中的異常類。
新增加的異常斷點會顯示在對應(yīng)分類下,如果想刪除,可以點擊 — 按鈕或者選擇要刪除斷點,點擊鍵盤上的刪除按鈕。
3. 小結(jié)
本節(jié)主要是介紹調(diào)試程序前的準(zhǔn)備工作, 主要包括如何配置調(diào)試器,斷點的分類、創(chuàng)建、屬性及編輯等功能。無論配置調(diào)試器還是斷點,大多數(shù)情況都會選擇系統(tǒng)提供的默認(rèn)設(shè)置,如需更新屬性設(shè)置,請先了解本節(jié)介紹的各個屬性基本含義后再進(jìn)行設(shè)置。