Pycharm Debug調試(純干貨)
使用Debug調試代碼
1.打斷點
一個斷點標記了一個代碼行,當Pycharm運行到該行代碼時會將程序暫時掛起。
注意斷點會將對應的代碼行標記為紅色,取消斷點的操作也很簡單,在同樣位置再次單擊即可。
如圖所示,打了兩個斷點
當你將鼠標指針懸停在斷點上方時,Pycharm會顯示斷點的關鍵信息,行號以及腳本屬性,如果你希望更改該斷點的屬性,右擊斷點:
可以嘗試對斷點屬性進行個性化更改,然后觀察圖標的變化。
2.代碼調試
我們有幾種方法來debug程序
第一種:通過鼠標右擊代碼處,可以來debug程序
第二種:可以通過點擊這個小蟲子的圖標來進行debug
接下來會Pycharm會執行以下操作:
(1)PyCharm開始運行,並在斷點處暫停
(2)斷點所在代碼行變藍,意味着Pycharm程序進程已經到達斷點處,但尚未執行斷點所標記的代碼。
(3)Debug tool window窗口出現,顯示當前重要調試信息,並允許用戶對調試進程進行更改。
在這里介紹一下debug窗口幾個圖標分別代表的意思
這里一排七個坐標的意思分別是
1.show execution point (F10) 顯示當前所有斷點
2.step over(F8) 單步調試。
若函數A內存在子函數a時,不會進入子函數a內執行單步調試,而是把子函數a當作一個整體,一步執行
3.step into(F7) 單步調試。
若函數A內存在子函數a時,會進入子函數a內執行單步調試。
4.step into my code(Alt + Shift +F7) 執行下一行但忽略libraries(導入庫的語句)
5.force step into(Alt + Shift +F7) 執行下一行忽略lib和構造對象等
6.step out(Shift+F8)當目前執行在子函數a中時,選擇該調試操作可以直接跳出子函數a,而不用繼續執行子函數a中的剩余代碼。並返回上一層函數。
7.run to cursor(Alt +F9) 直接跳到下一個斷點
然后接着來看變量查看器
在調試過程中觀察變量的狀態。我們需要對其設置一個查看器。在Watches窗口中,單擊加號,輸入期望查看的變量名稱,例如這里輸入delay,然后回車。我試了三個變量,這里我們看到這三個變量目前都是沒被定義的,我們可以在控制台里給它定義,也可以通過執行下一步,利用代碼中的賦值來定義。
*注意:*這個眼鏡模樣的圖案是watch窗口(我當時可是找了半天…,網上的都是一些老版本的介紹的watch窗口,=.=)
可以通過點擊這個圖標
將這兩個窗口連在一起查看
OK,接下來我們來看控制台窗口
Console窗口的工作模式:
為什么需要用到Console窗口呢?當我們需要查看程序給出的錯誤信息,或者進行一些額外的臨時運算時,就需要在這個窗口里面進行。
單擊左側工具欄中的命令符按鈕,顯示Python的命令提示符(在這里,問題又來了,新版的pycharm的那個圖標又換了,而且還隱藏的很深,這是怕別人找到了嗎。。。)
經過探索,發現在這=.=
點擊這個,即可顯示python的命令提示符
在這里做個小測試,這里可以直接編譯python代碼,執行一些python命令。
介紹完這些,開始進入正式調試代碼,我用的小例子的代碼如下:
import threading
import time
def get_thread_name():
t = threading.current_thread()
return t.name
def print_time(delay):
"""Define a function for the thread."""
thread_name=get_thread_name()
count = 0
while count < 8:
time.sleep(delay)
count += 1
print("%s:%s" % (thread_name, time.ctime(time.time())))
t1 = threading.Thread(target=print_time, args=(1,))
t2 = threading.Thread(target=print_time, args=(2,))
t1.start()
t2.start()
t1.join()
t2.join()
調試開始,並且在第一個斷點處停止,斷點所在的行變為藍色,說明Pycharm已經擊中了這個斷點,但尚未執行這行代碼。
通過斷點調試,在第一個斷點處,進行下一步操作,即可得到變量的值的變化情況
最后在介紹一下,可能有時候debug並不能正常進行,控制台會輸出如下信息:
程序本身應該沒有錯誤,就是不能正常debug。
下面記錄幾種解決方式:
一、關閉Pycharm,刪除工程目錄下的.idea文件夾並重啟。
二、刪除所有的斷點。可以點擊下圖所示的兩個疊在一起的紅色原點進行操作。
三、點擊Pycharm的File>>Invalidate Caches / Restart…,然后選擇Invalidate and Restart。這個操作清空了項目中的緩存信息。
四、重建整個工程並重新配置。
這四種方法可能會解決這個問題,我試了第三種,然后第二種應該也是可以的,第一種和第四種小心嘗試。
其實之前經常用print來進行調試,這是一種粗暴的方法,可以直接將錯誤信息打印出來。