iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
Software Development

Python GUI 專案設計模式及好用的開發技巧系列 第 16

不要再用print來debug 了 ...

  • 分享至 

  • xImage
  •  

筆者相信有非常多的朋友很愛用print 列印相關的訊息來當作除錯訊息的參考使用,類似下面的做法

筆者其實也很愛這樣的做法或是使用logging module 的形式記錄log,但還是想要有類似pdb 效果的除錯模組來得到更多的訊息以除錯判斷使用

這篇將介紹一個好用的debug 工具 - pysnopper

官方介紹:

引用自PySnooper - Never use print for debugging again

作法:

  1. 使用pip3 安裝pysnooper
pip3 install pysnooper
  1. 直接來看用法
import pysnooper
payload = b'\r\nroot@tc:~# hcitool cmd 0x03 0x03\r\n< HCI Command: ogf 0x03, ocf 0x0003, plen 0\r\n> HCI Event:
   ...:  0x0e plen 4\r\n  01 03 0C 00 \r\nroot@tc:~# \r\nroot@tc:~# '.decode()

 @pysnooper.snoop()
   def getHexnum(string):
       return "040E04" + string.split('\r\n')[-3].replace(' ','')

getHexnum(payload)

執行後會看到return value 跟程式執行所花的時間,非常方便

簡單的特性如下:

  1. 增加裝飾器 @pysnooper.snoop() 就可以完成該函數的監聽
  2. 將訊息存到文件中,使用@pysnooper.snoop(output.log),方便查看。
  3. 監聽全域變數的數值狀態
    @pysnooper.snoop(variables=('hello.hi','self.whattime'))
  4. 監聽某列表或者字典中的所有元素或者屬性:
    @pysnooper.snoop(watch=('hello.hi','self.x["whattime"]'))
  5. 監聽函數中的行號及使用的相關變數有哪些
    @pysnooper.snoop(depth=2)

當然還有更多的應用方式就留待其他有興趣的朋友去挖掘


上一篇
純手工打造UART間的資料清洗工具II - 在一個檔案中同時存取兩個UART的方法
下一篇
如何使用cython來打包程式碼成pyd格式 (就是DLL檔的意思)
系列文
Python GUI 專案設計模式及好用的開發技巧31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言