使用PDB远程调试时如何精准设置断点并跳过装饰器?及远程查看源码指定断点行方法
解决带装饰器函数的PDB断点问题
我之前调试Django带装饰器的视图函数时也踩过这个坑,给你两个靠谱的解决办法:
方法一:直接断点到被装饰的原函数
Django的login_required、csrf_protect这类装饰器都是通过functools.wraps实现的,它会把原始函数保存在被装饰函数的__wrapped__属性中。你只需要在PDB提示符下执行:
break views.like.__wrapped__
这个命令会直接跳过所有装饰器的包装代码,把断点设在like()函数的第一行,执行continue后就能直接进入目标函数调试了。
方法二:查看文件行号后精准设置断点
如果你想先确认like()函数在views.py中的具体行号,可以在PDB里执行shell命令快速定位:
!grep -n "def like" views.py
执行后会输出类似123: def like(request, comment_id, next=None):的结果,其中123就是函数定义的行号。接着用行号设置断点:
break views.py:123
这样断点就会直接定位到like()函数的定义处,不会触发装饰器代码的断点。
另外,你也可以在PDB里直接查看views.py的局部内容,用list命令指定文件和行号范围,比如:
list views.py:120,130
这会显示views.py中第120到130行的代码,方便你确认函数的具体位置。
内容的提问来源于stack exchange,提问作者Yan Tian
相关产品推荐
相关产品推荐

