如何在Python调试器(PDB)中执行多行语句

237 投票
6 回答
82170 浏览
提问于 2025-04-16 17:27

我在运行一个Python脚本,里面调用了Python的调试器PDB,方法是这样写的:

import ipdb; ipdb.set_trace()

(这是iPython版本的PDB,不过我觉得这没什么区别;我用它只是为了能看到彩色的输出)。

现在,当我进入调试器时,我想执行一些多行的语句,比如if语句或者for循环,但一输入

if condition:

然后按回车键,就会出现错误信息 *** SyntaxError: invalid syntax (<stdin>, line 1)

那么,在PDB中怎么才能执行多行语句呢?如果不行,有没有其他方法可以执行if语句或者for循环呢?

6 个回答

60

我建议使用IPython嵌入。

ipdb> from IPython import embed; embed()
164

在Python3中,ipdb(还有pdb)有一个叫做interact的命令。这个命令可以用来:

启动一个交互式解释器(使用code模块),这个解释器的全局命名空间包含了当前范围内所有的(全局和局部)名称。

要使用这个命令,只需在pdb提示符下输入interact。这个命令的用途很多,比如可以用来执行跨多行的代码,也可以避免意外触发其他pdb命令。

325

你可以在使用pdb的时候,启动一个临时的互动Python会话,这样你就能使用所有的本地变量了:

(pdb) !import code; code.interact(local=vars())
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 

当你完成后,按Ctrl-D就可以返回到正常的pdb提示符了。

记得不要按Ctrl-C,这样会结束整个pdb会话。

撰写回答