PDB在断点处不会停止

30 投票
6 回答
12940 浏览
提问于 2025-04-17 03:27

我刚开始学习用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能正常工作的原因,因为它是在你关注的那个线程里直接调用的。

撰写回答