在 PyCharm 里調(diào)試程序
前一節(jié)已經(jīng)講了調(diào)試程序的準(zhǔn)備工作,在設(shè)置斷點(diǎn)后,然后從選定的運(yùn)行/調(diào)試配置開始,就可以啟動(dòng)一個(gè)調(diào)試會(huì)話了。本節(jié)主要內(nèi)容是講解如何逐步完成程序調(diào)試,如何監(jiān)控調(diào)試信息及停止與暫停等相關(guān)功能。
1. 調(diào)試程序
-
在編輯器中打開所需的 Python 腳本,或在"Project"工具窗口中選擇文件。
-
從上下文菜單中選擇 “debug 腳本名”。Python 腳本的調(diào)試會(huì)話將從默認(rèn)的臨時(shí)運(yùn)行/調(diào)試配置開始,如果你已經(jīng)配置永久的運(yùn)行/調(diào)試配置為當(dāng)前腳本,此時(shí)菜單顯示 “debug 配置名”。
Tips: 在前面章節(jié)已經(jīng)講了如何添加運(yùn)行/調(diào)試配置,在調(diào)試腳本前,可以增加新的配置。除此以外,在前面章節(jié)運(yùn)行程序的方法入口也同樣適用于調(diào)試程序,在菜單中都會(huì)找到對(duì)應(yīng)的調(diào)試選項(xiàng)。 -
調(diào)試會(huì)話啟動(dòng)后,程序會(huì)在擊中的第一個(gè)斷點(diǎn)處掛起,PyCharm會(huì)自動(dòng)打開Debug 工具窗口。會(huì)包括Debugger 與 Console 選項(xiàng)卡。
-
在調(diào)試過程中, 可以通過工具欄按鈕暫停與恢復(fù)調(diào)試。對(duì)應(yīng)的菜單 暫停:
Run -> Debugging Actions -> Pause Program
恢復(fù)Run - Debugging Actions -> Resume Program
Tips: 如果對(duì)斷點(diǎn)執(zhí)行的靜音操作(mute breakpoints), 所有斷點(diǎn)圖標(biāo)將變?yōu)榛疑?,如下圖所示。在此種狀態(tài)調(diào)試程序,相當(dāng)于沒有斷點(diǎn)直接運(yùn)行了程序。如果要恢復(fù)斷點(diǎn),再點(diǎn)擊一下靜音斷點(diǎn)的按鈕即可。
-
當(dāng)執(zhí)行到達(dá)斷點(diǎn)或手動(dòng)掛起程序時(shí),可以通過分析棧幀來檢查應(yīng)用程序。所有當(dāng)前活動(dòng)的幀都顯示在Debugger 工具窗口的"Frames"窗格中。這種場(chǎng)景多用于多線程的情況。(棧幀就是一個(gè)函數(shù)執(zhí)行的環(huán)境。實(shí)際上可以簡(jiǎn)單理解為:棧幀就是存儲(chǔ)在用戶棧上的每一次函數(shù)調(diào)用涉及的相關(guān)信息的記錄單元。)
2. 分步調(diào)試程序
PyCharm 提供了一組步進(jìn)操作,可以分步調(diào)試程序,步進(jìn)按鈕位于調(diào)試工具窗口工具欄上。
下面從左到右分別介紹這些按鈕的作用:
- step over (F8): 單步執(zhí)行,執(zhí)行當(dāng)前代碼行,并帶你到下一行,即使行中包含方法調(diào)用,將跳過方法的實(shí)現(xiàn),不進(jìn)入方法內(nèi)部,直接移動(dòng)到調(diào)用方方法的下一行。
- step into (F7): 單步執(zhí)行,與step over 不同,如果包含方法調(diào)用可跳到當(dāng)前執(zhí)行點(diǎn)調(diào)用的方法內(nèi)部當(dāng)中去。
下面分別演示了step over 與 step into
- step into my code (??F7: Alt + Shift + F7) 調(diào)試時(shí),你可能只專注于自己的代碼,對(duì)于系統(tǒng)模塊的方法并不打算進(jìn)入,此時(shí)可點(diǎn)擊這個(gè)代替step into??聪旅娴睦觢ogger.xxx都是系統(tǒng)模塊logger的方法,而Solver()是自定義類,當(dāng)點(diǎn)擊step into my code 時(shí)只會(huì)進(jìn)入自定義類的方法中。
- force step into: 強(qiáng)制調(diào)試器跳到當(dāng)前執(zhí)行點(diǎn)中調(diào)用的方法。對(duì)于調(diào)試python 程序,大多數(shù)情況下這個(gè)按鈕是不可用狀態(tài),不是很常用。
- step out (?F8): 單擊此按鈕可使調(diào)試器退出當(dāng)前方法,并執(zhí)行其后執(zhí)行的行返回到上一層。 下面的例子先進(jìn)入方法內(nèi)部,然后step out 回到主程序,再點(diǎn)擊step out, 直接跳到下一個(gè)斷點(diǎn)。
- Run to Cursor(? F9: Alt + F9) 繼續(xù)執(zhí)行,直到達(dá)到光標(biāo)所在行的位置停止。在調(diào)試過程中,你點(diǎn)擊代碼中任意一行,然后點(diǎn)擊這個(gè)按鈕,調(diào)試器就會(huì)直接跳到這行,相當(dāng)給這行加了一個(gè)臨時(shí)斷點(diǎn)。
3. 小結(jié)
本節(jié)具體介紹如何調(diào)試代碼,查看調(diào)試信息,對(duì)于步進(jìn)工具按鈕在講解過程中為了便于理解,都是直接點(diǎn)擊工具欄按鈕,但在實(shí)際工作中,還是建議使用快捷鍵,這將有助于提高調(diào)試程序的效率。涉及的有些快捷鍵可能會(huì)與自身操作系統(tǒng)快捷鍵沖突,請(qǐng)打開 PyCharm/File -> Preference/Settings
增加自定義快捷鍵。