Python 程式如何高效地除錯?

2021-09-24 12:16:18 字數 3265 閱讀 3726

python在debug方面的支援還是不錯的,在明確**意義的情況下,通過log、print和assert分析錯誤原因,配合單元測試可以很高效。然而,實際工作中大量**很可能出自他人之手,這種情況下,使用debugger就顯得更加高效了。

一、在控制台下進行程式除錯

pdb如果你熟悉命令列除錯工具(例如gdb、lldb),那麼使用python中的pdb將獲得非常好的體驗,pdb不僅支援專案啟動時進行呼叫,也支援在python shell中互動式除錯;功能上,支援斷點、步進、異常捕獲和解決、變數檢視、變數改寫、棧檢視甚至位元組碼檢視等。

舉個pdb斷點除錯的例子:

然後執行這個指令碼,windows下面這樣執行 :

python debug1.py

然後執行到pdb.set_trace()這句後會自動進入斷點除錯模式,螢幕會顯示類似的資訊:

pdb顯示目前的斷點位置,然後你就可以使用pdb除錯命令了。

tips:其他常用命令有:

pp,列印

n,下一步,執行下一步

s,步進,一步步的執行

l,列出,顯示斷點周圍的源**

c,繼續,繼續程式的執行

r,返回,繼續直到當前函式返回

由pdb引入的vim、emacs工具都能很好地實現類似lldb和gdb的效果。同時,結合ipython這一擴充套件功能shell,其中的魔法命令能夠更好地幫助程式除錯。這是一般*nix環境下常見的除錯組合,配合配置良好的文字編輯工具都能實現不錯的類ide體驗。pdb更能進行遠端除錯,即對遠端(如伺服器上正在執行著的python**)進行除錯。幾乎所有的debugger工具都是在pdb的功能基礎上進行使用者介面上的提公升。

此外,對於部分框架,尤其是web框架,進行除錯往往需要結合具體的上下文環境(例如django的開發除錯測試需要上下文環境等),pdb互動式除錯可以直接掛載在對應的互動環境中(如django shell)。

pudb

如果你覺得這樣太原始,那麼可以嘗試pudb,它是基於控制台的debug圖形化debugger工具,稍微比pdb直觀一點,但僅可以在linux下執行。

這個圖形介面有點原始,不支援滑鼠,所以不要用滑鼠點。

二、圖形介面下的程式除錯

vscode量級較輕,但只需要安裝乙個python語言支援工具,搖身一變就能成為全功能python ide,智慧型感知、補全、重構、查詢定義**段等編輯功能一應俱全,而且除錯功能也十分完整,能在除錯模式中涵蓋pdb的全部功能,並能在圖形介面下簡單地進行操作。

如果非要說乙個vscode的弱點的話,應該是其除錯工具、直譯器的配置沒有具體的配置頁面,需要通過配置檔案來進行修改,這一點或許會給新手帶來困惑。

visual studio

vs號稱宇宙第一ide,其python開發工具自然也能帶來非常好的體驗。在vs2017中,python開發環境就已經是可選擇的安裝選項了。對於許多曾經使用vs在windows下進行其他語言開發工作的人而言,熟悉的快捷鍵、清晰的環境及不會特別誇張的資源消耗絕對是vs的加分點。

當然,其debugger功能也是一應俱全的。

spyder

作為開源社群貢獻的由python編寫的跨平台ide,spyder以輕量、便捷、高度集成為賣點。spyder允許在多種不同的預設模式下工作,例如類似matlab式的科學計算互動介面,以及其他應用工程開發形式的介面環境;在編碼過程中spyder可實時提示文件、互動式執行、除錯時顯示全部變數表,並可一鍵視覺化等,對於資料分析而言具有很好的便利性;同樣,它也支援步進跟蹤等一系列pdb所提供的除錯功能。若是說缺點,介面本身不具時尚感,算吧?

eclipse是最輝煌的開源跨平台多語言ide之一,有著大量使用者的簇擁,自然它也為python提供了支援。pydev是eclipse上的python開發工具包,提供完整ide功能,也包含所述的斷點、步進等除錯功能,eclipse + pydev可能是最完整的開源python ide解決方案。

或許每乙個python開發者對於pycharm都不陌生,作為目前最好用的python ide,pycharm保持著乙個季度一更新的版本迭代頻率,每次更新都能帶來功能上的驚喜,並且無論你是資料分析、應用開發者抑或是服務端開發,pycharm都能提供最好的體驗。它是最智慧型的ide,能夠通過你引用的模組推斷提醒你是否需要進入科學計算模式;能夠解析**中存在的其它語言片段(如字串中的sql、html、js等);可以結合jupyter notebook進行開發和展示;能夠通過**生成uml圖,包含圖形化的單元測試、覆蓋率分析、效能分析工具和並行分析工具;能夠遠端除錯、一鍵部署,能深入結合各種常見框架提供更好的支援;也能方便地進行圖形化debug。

pycharm的缺點?應該是在設定好直譯器後,pycharm將會對環境中所有的site-package進行解析和抽取,以供智慧型感知自動補全使用,在這期間ide對記憶體和cpu的占用都非常大,但如若您的電腦用一塊高速ssd作為硬碟,同時又有足夠大的記憶體,一切便會顯得非常完美。

與visual studio類似,pycharm是商業軟體,雖然它也提供了免費的社群版,但相比之下,社群版的pycharm受限的功能較多。不過,如果你還是一名學生,便可以利用自己的教育郵箱申請免費的教育版學生授權,體驗與pro版一致的全部功能。

如何高效地管理時間

如何高效地管理時間 現代人的生活節奏越來越快,壓力也越來越大。經常會聽到白領人士抱怨乙個星期有三到四天的時間在加班,沒有時間鍛鍊身體,身體經常處在一種透支的狀態 也有人抱怨,雖然現在的職位已經到了中層管理層,但是沒有安全感,因為知識的更新速度太快。其實大家都感覺到時間是個瓶頸,每天列了一大堆的計畫,...

如何高效地管理時間

如何高效地管理時間 現代人的生活節奏越來越快,壓力也越來越大。經常會聽到白領人士抱怨乙個星期有三到四天的時間在加班,沒有時間鍛鍊身體,身體經常處在一種透支的狀態 也有人抱怨,雖然現在的職位已經到了中層管理層,但是沒有安全感,因為知識的更新速度太快。其實大家都感覺到時間是個瓶頸,每天列了一大堆的計畫,...

如何高效地做設計評審

設計評審 design review 即在真正開始開發之前,組織一次或多次會議,先評審設計,以降低日後返工甚至專案失敗的風險。相信工作過一段時間,開始主導乙個功能模組甚至整個系統的同學,都對設計評審不會陌生。今天偶然看到了一篇亞馬遜vp及distinguished工程師brad porter的一篇部...