Python 程序如何高效地調試?

Python在debug方面的支持仍是不錯的,在明確代碼意義的狀況下,經過log、print和assert分析錯誤緣由,配合單元測試能夠很高效。然而,實際工做中大量代碼極可能出自他人之手,這種狀況下,使用debugger就顯得更加高效了。python

 

 

 

 

1、在控制檯下進行程序調試shell

 

PDB服務器

 

若是你熟悉命令行調試工具(例如gdb、lldb),那麼使用Python中的PDB將得到很是好的體驗,PDB不只支持項目啓動時進行調用,也支持在Python shell中交互式調試;功能上,支持斷點、步進、異常捕獲和解決、變量查看、變量改寫、棧查看甚至字節碼查看等。框架

 

舉個PDB斷點調試的例子:編輯器

用文本編輯器新建一個文檔,就命名爲debug1.py吧,輸入最簡單的Python代碼片斷:函數

import pdb
a = "a string"
b= "b string"
pdb.set_trace()
print("next step")

而後運行這個腳本,Windows下面這樣運行 :工具

python debug1.py

而後執行到pdb.set_trace()這句後會自動進入斷點調試模式,屏幕會顯示相似的信息:性能

> c:\users\david\documents\debug1.py(5)<module>()
-> print("next step")
(pdb)

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下運行。

 

 

這個圖形界面有點原始,不支持鼠標,因此不要用鼠標點。

 

 

2、圖形界面下的程序調試

 

若是你更習慣於IDE的總體調試,也沒有問題。不少支持Python的IDE,調試功能都十分強大,甚至輕量級編輯器也都具有完善的調試功能。接下來簡單介紹幾款圖形化的IDE工具:

 

Visual Studio Code

 

VSC做爲一個跨平臺的重量級文本編輯器以及輕量級IDE,現在已經獲得了愈來愈多開發者的喜好,而Anaconda做爲Python發行版集成環境,已將VSC做爲推薦開發工具。

 

 

 

 

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 + PyDev

 

Eclipse是最輝煌的開源跨平臺多語言IDE之一,有着大量用戶的簇擁,天然它也爲Python提供了支持。PyDev是Eclipse上的Python開發工具包,提供完整IDE功能,也包含所述的斷點、步進等調試功能,Eclipse + PyDev多是最完整的開源Python IDE解決方案。

 

 

 

 

PyCharm

 

或許每個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版一致的所有功能。叉車配件

相關文章
相關標籤/搜索