Pycharm Debug調試(純干貨)


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來進行調試,這是一種粗暴的方法,可以直接將錯誤信息打印出來。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM