不要再用print来debug 了 ...

笔者相信有非常多的朋友很爱用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)

当然还有更多的应用方式就留待其他有兴趣的朋友去挖掘


<<:  Day 15 - Order & Deal Event

>>:  Day30 javascript 总结

[Day29] BERT(二)

一. 预训练的BERT 接下来会介绍hugging face这个团队提供的BERT的套件来做介绍~B...

Day2 # Hello World

在第一天完成安装後,就可以使用 Go 来写程序啦! 作为一个工程师,一定要来段 Hello Worl...

亏损也是获利的一环

巴菲特有句名言:「规则一,永远不要输钱。规则二:别忘记规则一。」 https://www.youtu...

DAY 30 资安裁罚案件汇整:共26件裁罚案,其中22件保险局,2件证期局,2件银行局

以下为笔者针对2019/01~2020/10为止的资安裁罚案件整理表,共26件裁罚案,其中22件保险...

第十六天:复数专案架构

之前在看别人的 JVM 专案时,有时会发现数个不同的 Module 原始码却都指向同一个 Repos...