Fork me on GitHub

【基础14】【自学笔记】python使用 PySnopper 调试疑难杂症

一、快速安装

执行下面这些命令进行安装 PySnooper

$ python3 -m pip install pysnoopere

二、快速使用

1、 定义了一个 demo_func 的函数,在里面生成一个 profile 的字典,更新字典值,最后返回

import pysnooper

@pysnooper.snoop()
def demo_func():
    profile = {}
    profile["name"] = "写代码的小风"
    profile["age"] = 27
    profile["gender"] = "male"

    return profile

def main():
    profile = demo_func()

main()

运行结果:

Source path:... E:/xry/pyqt_lx/python基础/PySnopper 调试疑难杂症.py
14:51:53.197605 call        22 def demo_func():
14:51:53.197605 line        23     profile = {}
New var:....... profile = {}
14:51:53.197605 line        24     profile["name"] = "写代码的小风"
Modified var:.. profile = {'name': '写代码的小风'}
14:51:53.197605 line        25     profile["age"] = 27
Modified var:.. profile = {'name': '写代码的小风', 'age': 27}
14:51:53.197605 line        26     profile["gender"] = "male"
Modified var:.. profile = {'name': '写代码的小风', 'age': 27, 'gender': 'male'}
14:51:53.197605 line        28     return profile
14:51:53.197605 return      28     return profile
Return value:.. {'name': '写代码的小风', 'age': 27, 'gender': 'male'}
Elapsed time: 00:00:00.000000

 PySnooper 把函数运行的过程全部记录了下来,包括代码的片段、行号等信息、函数内局部变量的值如何变化、函数的返回值、运行函数耗时

2、重定向到日志文件

import pysnooper
@pysnooper.snoop(output='./debug.log')
def demo_func():
    profile = {}
    profile["name"] = "写代码的明哥"
    profile["age"] = 27
    profile["gender"] = "male"


    return profile

def main():
    profile = demo_func()

main()

3、跟踪非局部变量值,设置调试日志的前缀

ySnooper 是以函数为单位进行调试的,它默认只会跟踪函数体内的局部变量,若想跟踪全局变量,可以给 @pysnooper.snoop() 加上 watch 参数,通过 prefix="demo_cs:" 设置日志前缀显示

import pysnooper
out = {"foo": "bar"}
@pysnooper.snoop(watch=('out["foo"]'), prefix="demo_cs:")
def demo_func():
    profile = {}
    profile["name"] = "写代码的小风"
    profile["age"] = 27
    profile["gender"] = "male"
    out["foo"]="foobar"
    return profile

def main():
    profile = demo_func()

main()

PySnooper 会在 out["foo"] 值有变化时,也将其打印出来

 

posted @ 2021-12-29 15:05  橘子偏爱橙子  阅读(60)  评论(0编辑  收藏  举报