PDB在断点处不会停止
我刚开始学习用pdb来调试程序,但在调试我的Django应用时遇到了一些问题。以下是我正在做的事情:
python -m pdb manage.py runserver
(pdb) b core/views.py:22
Breakpoint 2 at /Users/raphaelcruzeiro/Documents/Projects/pdb_test/core/views.py:22
(Pdb) c
但是程序执行时直接跳过了我设置的断点。我是不是漏掉了什么命令?手册里对如何设置断点的说明也没有更多的细节。
6 个回答
4
我之前看到这个问题的时候,通常是因为有人在一个其实没有执行的地方设置了断点。比如说,空白行、注释行,或者多行语句中的错误部分。
12
我通常喜欢在代码里直接使用 set_trace()
,这样当我添加或删除代码时,开发服务器会自动重新加载,我就不需要手动停止再启动它了。比如:
def get_item(request):
import pdb; pdb.set_trace()
当访问这个视图时,pdb 就会启动。
26
我也遇到过同样的问题。
你可以试试这个命令:python -m pdb ./manage.py runserver --nothreading --noreload 127.0.0.1:8080
。这个方法对我有效。
看起来,PDB中的断点是和线程相关的,所以需要使用--nothreading
和--noreload
这两个选项,来避免一些可能让PDB感到困惑的操作。这也是为什么set_trace
能正常工作的原因,因为它是在你关注的那个线程里直接调用的。