使用這些庫和工具像英雄一樣調試 Python

已發表: 2022-06-26

你想成為真正的 Python 調試專家嗎? 使用我們將很快介紹的這些令人驚嘆的 Python 調試工具和庫來調試您的 Python 代碼!

Python 是一種通用的、高級的、面向對象的編程語言,用於許多開發目的。 此外,它還是適用於不同應用程序的有效開發工具,從 Web 應用程序開發到 Web 抓取以及更複雜的應用程序(如機器學習和數據科學)。

在開發過程中,很容易出現被稱為編程錯誤的錯誤。 開發人員採取幾個步驟來檢測和消除代碼中現有的和潛在的錯誤。 因此,您可以防止程序代碼崩潰。 我們將此過程稱為調試。

本文將介紹您可以使用的幾個可用的 Python 調試器。 我們還將看到這些調試器彼此之間有多麼不同,以及是什麼使它們的實現有效。

cProfiler 調試庫

cProfiler 是一個流行的庫和一個執行長時間運行代碼分析的 C 擴展。 從長遠來看,它會識別需要很長時間才能運行的程序代碼部分。 儘管它確定了運行代碼不同部分的準確時間,但它並不能完全識別或修復代碼中的錯誤。

因此,需要使用其他調試器。

幸運的是,您可以使用推薦的庫(如 ipdb、Django-debug-toolbar、pyelftools、viztracer 和 py-spy)作為 Python 代碼的調試工具。

ipdb調試工具

完全啟用 IPython 的 Python 調試器是包含 pdb 功能的交互式第三方調試器。 Ipbd 還帶有交互式 shell IPython 支持。 這種支持包括製表符補全、顏色支持和魔術功能,以及其他支持功能。

此調試器通過導出相關函數啟用對 IPython 調試器的訪問。 它還提供了一個類似的接口來更好地進行自省,就像在 pdb 模塊中一樣。

使用 Ipdb 進行調試

該庫需要使用下面的 pip 命令安裝。

 pip install ipdb

使用 ipdb 的示例如下所示:

 import ipdb alpha_list = ['a', 'b', 'c'] fruit_list = ['orange', 'mango', 'kiwi'] def nested_loop(): for fruit_list: print (fruit) ipdb.set_trace() for x in alpha_list: print(x) if __name__ == '__main__': nested_loop()

使用以下命令運行 python 文件,其中 test.py 是我的文件名:

 python -m ipdb test.py

ipdb 導入和運行ipdb.set_trace()函數允許程序的開始並通過執行運行調試器。

ipdb.pm()函數(事後分析)的作用類似於%debug魔術函數。

set_trace 參數

將上下文作為參數傳遞給set_trace以顯示定義的幾行代碼。 此外, set_trace也接受作為參數的cond接受布爾值,並在您將cond設置為true時啟動 ipdb 接口。

使用配置文件

分別使用主文件夾和項目文件夾中的 idpdb 文件或setup.cfg文件設置上下文參數。 歡迎您進一步檢查 ipdb 的功能。

Django 調試工具欄

Django 調試工具欄是 Django 中流行的調試工具:一個 Python 框架。

這組可配置的面板顯示當前請求或響應的調試信息。 單擊工具欄時,將顯示有關面板內容的更多詳細信息。

這個工具徹底檢查了 Django 開發環境。

按照此處的安裝過程和配置說明進行操作。

Pyelftools 庫

pyelftools 庫完全基於 Python 構建。 它解析和分析 ELF 文件和 DWARF 調試信息,只需要 Python 即可運行。

使用 Pyelftools 很容易,因為它沒有外部庫。 此外,在不安裝的情況下使用 pyelftools 非常容易,因為它只需要在環境變量中調整PYTHONPATH

您將使用以下方式安裝它:

 pip install pyelftools

pyelftools 的實現只需要導入它並在您的程序中調用它。

冰淇淋調試工具

這是 Python 開發人員的另一個高效調試工具。

使用 icecream,也就是ic() ,比 print() 有很多好處,如下所述:

  • 從字面上看,打字相對較快。
  • 它可以很好地打印數據結構。
  • 使用ic()打印表達式或變量名稱及其值。
  • 它突出顯示了輸出的語法。
  • 可選地,它包括程序上下文,包括文件名、行號和父函數。

在使用這個包之前,使用下面的 pip 命令安裝它:

 pip install icecream

好消息是您可以在所有文件中使用ic() ,而不必通過使用install()安裝它來將其導入所有文件中。 此外, install()ic() ) 添加到內置模塊。 解釋器導入的所有文件都將共享ic()

在您可以命名為 x.py 的第一個根 python 文件中,使用install()添加ic() ) 。

 from icecream import install install() from y import mult mult()

在 y.py 文件中導入 x.py 文件,調用 ic()

 def mult(): z=8 ic(z)

結果:

 y ic| z : 8

使 ic() 更高效的是它能夠檢查傳遞給它的變量,包括它自己,然後打印它的參數和參數值,如下例所示。

 from icecream import ic def mult(x): return x * 4 ic(mult(100))

輸出:

 ic| mult(100): 400

此外,您可以將 ic() 插入到預先存在的代碼中,因為它返回其參數。 下面的示例返回ic| x: 12 ic| x: 12 ,然後ic| y: 48 ic| y: 48

 from icecream import ic x = 12 def mult(x): return x*4 y = mult(ic(x)) ic(y)

使用 py-spy 工具進行調試

您可以使用 py-spy 作為調試工具來分析 Python 程序的示例。 py-spy 無需重新啟動程序或修改其代碼,即可可視化 Python 程序的執行。 此外,因為它是用 Rust 編寫的,所以開銷很低。

此外,值得考慮的是,對生產 Python 代碼使用 py-spy 是安全的,因為它運行的進程與已分析的 Python 程序不同。

就像我們之前看到的所有其他工具一樣,您可以在安裝後使用 py-spy 工具。

 pip install py-spy

儘管您的 Python 程序服務於生產流量,但您仍然可以使用 py-spy 分析和調試該程序,使其成為關鍵的 Python 分析器工具。

Viztracer 調試器

或者,您可以使用調試工具 viztracer 來跟踪和可視化您的 Python 程序執行。 它也是一個具有低開銷日誌記錄的分析工具。

是什麼讓 viztracer 成為有效的調試工具?

  • 使用它非常簡單,並且它不依賴於外部包來工作。
  • Viztracer 可在所有操作系統平台上運行:Windows、Linux 或 macOS。
  • 其強大的前端平滑渲染GB級trace。
  • 它使用 RegEx 記錄任意函數和額外信息,如變量和屬性、引發的異常、垃圾收集器操作等,而無需修改源代碼中的任何代碼部分。
  • 使 viztracer 成為低開銷調試工具的原因在於它能夠過濾掉程序中不需要的數據。 然後,它會在以 JSON 格式轉儲日誌之前保留舊信息。
  • 您可以使用它在程序運行時插入自定義事件,例如即時事件、變量事件和持續時間事件。 這樣,它就像打印調試一樣工作,除了 viztracer 會在您跟踪數據時讓您知道打印發生的時間。

結論

Python 分析和調試就像軟件分析一樣是開發中需要注意的關鍵步驟。 此步驟有助於排除任何有 bug 的代碼段,從而優化代碼的整體性能。

我們上面介紹的調試工具是使 Python 開發人員的工作非常輕鬆的高效工具。

看到其他調試工具比 cProfiler 更有效地工作,您可以像真正的英雄一樣調試您的 Python 代碼並使用這些調試器修復任何潛在的錯誤,以防止您的代碼在不崩潰的情況下運行。

調試愉快!