程式碼除錯的N種姿勢
再牛的程式設計師也沒法一口氣把程式碼全部寫正確,通常做法就是寫一小段然後驗證程式碼正確性,再繼續寫下一段,這樣能保證程式碼不會錯得太離譜。怎麼衡量一小段程式碼呢?在你覺得這段程式碼沒有十足把握的情況下就應該停下來驗證一下。
除錯的本質是確認你認為正確的事情確實是正確的,這次來介紹一下 Python 中除錯程式碼的 N 種姿勢
print 函式使用簡單方便,所以開發中我們經常使用它做簡單除錯,來列印某個值是否是否則預期的。 不過 print 也有不足的地方,如果想列印一個複雜物件,或者是很長的字典、列表等複合物件時,列印的結果堆在一行,很不友好,想看下資料的結構還不容易,例如:
pprint
好在 Python 內建了另一個列印工具 pprint,全稱叫 pretty printer,顧名思義就是加了美顏效果的列印工具,在列印複雜的物件時,以可讀的格式輸出,當然你還可以自己指定縮排和行的最大寬度,這在遇到複雜物件時非常有幫助,例如:
prettyprinter
人類對美的追求是沒有終點的,雖然 pprint 已經夠用了,但是總有人覺得它還不夠美,於是有人就在此基礎上搞出一個更強大的列印工具叫 prettyprinter, 這是個第三方工具,需要額外安裝。你可以看到時間物件更可讀,不過我有感覺有點冗餘,在Linux環境下還可以變色。專案地址:https://github.com/tommikaikkonen/prettyprinter/tree/master/prettyprinter
logging
在開發過程中使用 print 除錯程式碼方便又簡單,但上線前一定要把這些冗餘程式碼去掉,否則還會影響效能。那麼線上某些關鍵位置想跟蹤怎麼辦,這時 logging 的作用就發揮出來了。很多時候在測試環境不會出現的異常放正式環境就出現了,因為你要面對的各種臨界條件,使用 logging 的好處不言而喻,可以設定不同的日誌級別,例如 debug、info、error 等級別,你還可以將日誌持久化,方便後續做日誌追蹤。
PDB
PBD 是 Python 的內建模組,是一個真正用於程式碼除錯的,因為你可以在程式碼執行的時候設定斷點、單步除錯、進入函式除錯、檢視當前程式碼、檢視棧片段、動態改變變數的值等。PDB 在早期還沒有整合開發工具IDE的時候,非常有用(現在也使用),只需要一個命令:
python -m pdb test.py
就可以進入除錯模組,不喜歡用 IDE 的同學可以考慮使用。
PyCharm
但是現在有更先進的開發工具了,像 PyCharm、PyDev 這樣的工具都支援程式碼除錯、打斷點、動態修改變數值等等,不僅如此,PyCharm 還支援遠端除錯。在 Bug 隱藏比較深的情況下,我們有時就會祭上這樣的大殺器。
你還有那些好用的神技能,歡迎留言分享
相關文章
- Powershell惡意程式碼的N種姿勢
- Python爬蟲的N種姿勢Python爬蟲
- 實現同比、環比計算的N種姿勢
- 解鎖canvas匯出圖片跨域的N種姿勢~Canvas跨域
- Windwos密碼匯出的幾種姿勢密碼
- SpringBoot 系列 web 篇之自定義返回 Http Code 的 n 種姿勢Spring BootWebHTTP
- Vue搭建前端監控,採集使用者行為的 N 種姿勢Vue前端
- 小程式各種姿勢實現登入
- Git Bash 提交程式碼的正確姿勢Git
- Guava Cache使用的三種姿勢Guava
- Java記憶體洩漏、效能優化、當機死鎖的N種姿勢Java記憶體優化
- 問題解決:嘗試解決maven依賴找不到的n種姿勢Maven
- UIWebView程式碼注入時機與姿勢UIWebView
- Java記憶體洩漏、效能最佳化、當機死鎖的N種姿勢Java記憶體
- 建立 React 元件三種“姿勢”React元件
- PHP 檔案操作的各種姿勢PHP
- 解鎖跨域的九種姿勢跨域
- 【吐血整理】Git的各種撤銷姿勢Git
- 跨頁面通訊的各種姿勢
- Python 連線 MySQL 的幾種姿勢PythonMySql
- 程式設計師該用哪種姿勢來理財程式設計師
- Flutter 錯誤捕獲的正確姿勢Flutter
- GDB 除錯程式碼除錯
- 程式設計師在家擼碼的十大姿勢程式設計師
- Python 程式碼除錯—使用 pdb 除錯Python除錯
- 論JVM爆炸的幾種姿勢及自救方法JVM
- 企業使用資料庫的12種姿勢資料庫
- 開啟Flutter動畫的另一種姿勢——FlareFlutter動畫
- 在react中使用svg的各種騷姿勢ReactSVG
- 入門快應用的另一種姿勢
- 程式設計師須知,Python匯入模組的幾種姿勢!程式設計師Python
- 原始碼|使用FutureTask的正確姿勢原始碼
- vue 程式碼除錯神器Vue除錯
- 淺談OC物件初始化的三種姿勢物件
- 關於6種Web安全常見的攻防姿勢Web
- Spring Boot 郵件傳送的 5 種姿勢!Spring Boot
- 構建 Go 應用 docker 映象的十八種姿勢GoDocker
- Unreal Cook Book:建立物件的的幾種姿勢(C++)Unreal物件C++