Debuging Django

起初 hackernews 看到一个文章 PySnooper: Never use print for debugging again,觉得挺有意思的,结果把 hackernews 的讨论看了一下发现有意思东西更多一点,总结一下。

  1. PySnooper: Never use print for debugging again,只需要给函数加一个装饰器,就可以把函数执行的每一步的结果都打印出来。
  2. django-extensions 的 runserver-plus 配合 Werkzeug 可以实现在遇到异常的时候,支持在 web 上面调试代码,打印异常的时候的上下文内容什么的。
  3. Python 自己的 breakpoint 函数,执行到的时候默认会进入 pdb.set_trace() 状态方便你进行上下文调试。
  4. icecream 提供了一个方便的 ic 函数,可以无感的加入到你的代码里面,不影响你的代码的执行结果,但是会打印传给它的参数和执行结果。
  5. Behold: A debugging tool for large Python projects,可以替代你写冗长的打印命令。不过感觉它自己的语法似乎也并不方便。。。
  6. VS Code 提供的 Logpoints 和 Visual Studio 提供的 Break When Value Changes
  7. stackprinter 可以让你的堆栈打印更友好,打印堆栈的时候还可以输出上下文的取值。
  8. pdb, epdb,ipdb, 应该都是类似的东西,其中 pdb 是自带的。通过给代码增加 import ipdb ipdb.set_trace() 调试。
  9. pydbg 替代 print 的。

另外一篇文章

  1. 可以使用 f-string 调试
        print(f"i={i}, processed_word={processed_word}") # python 3.6
        print(f"{i=}, {processed_word=}") # python 3.8
  1. PySnooper: 感觉有点太重了,一般也不是总是需要打印这些。
  2. 使用 logging: 这个和 f-string 感觉没啥大差别。
  3. 使用 pdb 的 breakpoint() 进入 pdb 交互。
  4. 使用 vscode。
  5. 使用 stackprinter。