用 print 太慢了!資深工程師要知道這 5 個 debug 工具

debug

debug 是工程師的「日常」,但那是一個很煩的工作,很容易拖到下班時間。許多工程師會使用 print 語法來 debug,也就是跟蹤程式碼的執行狀況,並檢測錯誤發生的位置。如果程式碼只有幾百行,用 print 是可行的;但如果程式碼上萬行,這就會是曠日廢時的苦差事。那該如何提升 debug 的效率呢?量子運算博士生 Sara A. Metwalli 分享 5 個 debug 工具 給工程師參考。

1. Python Standard Debugger(pdb)

Python Standard Debugger(pdb)是相對簡單的 debug 工具,適用於中小型的專案。pdb 是一種命令行(command-line)工具,可以在程式碼中插入斷點,然後使用 pdb 運作程式碼。透過斷點,你可以檢查程式碼與棧幀(stack frame),跟 print 語法很類似。

pdb 可以跳過一些程式碼,或在特定時間內迭代 loop 迴圈。目前所有版本的 Python 都有附加 pdb,所以可以直接用,不需要另外安裝,但你也能加入擴充,例如 rpdb 或 pdb++,增加它的功能。

2. PyCharm

PyCharm 是一種 IDE(Integrated Development Environments),它不僅是一種 debug 工具,也是一個完整的開發環境。不同於命令行的 debug 工具,IDE 提供一種視覺化調整與測試程式碼的方式,讓 debug 更容易。但如果你沒用過 IDE,會需要一點時間適應。

在 PyCharm 中,對話框會引導你完成 debug,並允許你選擇各種參數。使用 PyCharm 的 debug 模式時,可以在特定的程式碼中插入斷點,也可以選擇中斷點(exception breakpoint)。

3. Visual Studio Debugger

Visual Studio(VS)也是 IDE,是微軟開發的 debug 工具。VS 有 Visual Studio 2019 與 Visual Studio Code(VS Code)兩種變體。Visual Studio 2019 支持基本的 Python  debug 與 IronPython.NET 的 debug,因此你可以使用 MPI 集群 debug、斷點、條件斷點、跳步(into/out/over)、中斷點等等。

VS Code 除了 Git 控制、語法凸顯(syntax highlighting)、代碼重構(code refactoring)之外,還有更高級的 debug 工具。VS Code 可以處理多語言的程式碼庫,但它在識別語言方面並不靈活。

工程師除了 debug 到想哭,面對雲端開發數量大爆發,除了 CI/CD 管線配置,每天還有上千個微服務維護的重擔,要怎麼早下班啦!報名 微軟 2021 雲端技術盛會 為您揭曉 GitOps 新工具!

4. Komodo

Komodo 是全功能 IDE,由 ActiveState 開發,具有處理多種程式語言的能力。因此,若你在建立一個包含 Python 的多語言程式碼庫,Komodo 就是好選擇。

Komodo 透過對話框取得 debug 選項;如果你選擇預設的設定,Komodo 不需要進一步的設定就能運作。Komodo 也提供不同的視覺化方案,協助你理解程式碼庫。另外,它也允許你執行單元測試,並支援團隊即時協作;也能將 Git 與 Komodo 整合,實現即時版本控制。

5. Jupyter Visual Debugger

Jupyter Visual Debugger 是由 Jupyter 發布的視覺化 debug 工具,能在 Jupyter 的環境使用。目前多數的數據科學應用由 Jupyter Notebook 或 Jupyter Lab 建構,Jupyter Visual Debugger 讓你能直接在 Jupyter 的環境 debug,使用上更方便。

透過 Jupyter Visual Debugger,你能在 notebook cell 或 source file 中設置斷點、檢查變數,或瀏覽呼叫堆疊(call stack)。這個 debug 工具能讓 Jupyter 變成完整的開發環境,你不再需要在其他地方測試或 debug 程式碼。

可以透過以下命令,輕鬆安裝 Jupyter Visual Debugger:

conda install xeus-python -c conda-forge

總結:debug 是工程師的必修技能

bug 有兩種,一種是語法錯誤,一種是語意錯誤。語法錯誤指的是你打錯命令、在沒有定義變數/函數的狀況下使用變數/函數,或者是程式碼的縮排不正確,導致程式錯誤的狀況。這種情況下,通常能按照 Python Traceback 的指示修復,是相對好處理的 bug。語意錯誤指的則是程式碼結構沒問題,但你把語意寫錯了,這時程式就會算出錯誤的答案,或是跑出不合預期的結果。這是比較難處理的 bug。

若你是程式的初學者,debug 並不是學習重點,因為此時你得先學會如何寫程式。但隨著資歷增加,debug 就是你必須精進的技能。許多人會用 print 語句 dubug,但隨著程式碼的量增加,print 的效率就略顯不足,若能使用適當的工具,就能提升 debug 的效能,讓你精準又快速的解決問題。

參考資料

Toward Data Science

(本文提供合作夥伴轉載。首圖來源:Piqsels CC Licensed

延伸閱讀

裝上這個外掛,不用寫 code 就能用 Python 做數據分析!
給 Python 初學者的 11 道練習題,讓你由淺入深掌握 coding 技術!
新年目標想成為 Python 高手,你一定要知道這十大模組!


參加線上講堂抽 AirPods!重磅解密 4 大雲端新技術

報名 《Cloud Innovation Summit》 觀看影片,並填寫問卷,就能參加 AirPods 抽獎! 2021 年微軟集結 K8s 聯合創辦人、 全球開源領域重量級廠商、台灣第一線雲端專家群,解析 4 大雲端主題 #開源 #數據與 AI #資安 #雲端原生 >> 立即報名

點關鍵字看更多相關文章: