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 的效能,讓你精準又快速的解決問題。
參考資料
(本文提供合作夥伴轉載。首圖來源:Piqsels CC Licensed)
延伸閱讀
裝上這個外掛,不用寫 code 就能用 Python 做數據分析!
給 Python 初學者的 11 道練習題,讓你由淺入深掌握 coding 技術!
新年目標想成為 Python 高手,你一定要知道這十大模組!