如何在Python自己的debugging器(PDB)中执行多行语句

所以我正在运行一个Python脚本,在这个脚本中,我正在调用Python的debugging器PDB:

import ipdb; ipdb.set_trace() 

(iPython的PDB版本,虽然我不认为这是有区别的,我只用于彩色输出)。

现在,当我到达debugging器时,我想执行一个多行语句,如if子句或for循环,但只要我键入

 if condition: 

并按回车键,我得到错误消息*** SyntaxError: invalid syntax (<stdin>, line 1)

如何在PDB中执行多行语句? 如果不可能的话是否有办法解决这个问题仍然执行if子句或for循环?

您可以在pdb中执行此操作,以启动所有可用的本地variables的临时交互式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会话。

在Python(2.7.1)解释器或debugging器(import pdb)内部,可以使用以下语法执行多行语句。

 for i in range(5): print("Hello"); print("World"); print(i) 

注意:当我在解释器内部时,必须在执行代码之前打回两次。 在debugging器内部,我只需要返回一次。

PDB有一个叫做交互的命令。 它可以用来:

启动一个交互式解释器(使用代码模块),其全局名称空间包含在当前作用域中find的所有(全局和本地)名称。

要使用它,只需在pdb提示符下inputinteract 。 除此之外,使用跨越多行的代码很有用,同时也可以避免意外触发其他的pdb命令。

如果你想在命中一个中断点的时候执行一些命令,就有特殊的情况。 然后是debugging器命令commands 。 它允许您input多行命令,然后用end关键字结束整个序列。 更多(pdb) help commands

我不知道你是否可以这样做,这将是一个很好的ipdbfunction。 您当然可以使用列表parsing,并执行简单的多行expression式,如:

 if y == 3: print y; print y; print y; 

你也可以事先写一些函数来做任何你需要做的事情,通常需要多行。