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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Python自己的调试器(PDB)中执行多行语句相关的知识,希望对你有一定的参考价值。

所以我正在运行一个Python脚本,在其中我通过编写调用Python的调试器PDB:

import ipdb; ipdb.set_trace()

(iPython的PDB版本,虽然我认为它不会产生影响;我只将其用于彩色输出)。

现在,当我到调试器时,我想执行多行语句,例如if子句或for循环,但是一旦我输入

if condition:

并点击返回键,我收到错误消息*** SyntaxError: invalid syntax (<stdin>, line 1)

如何在PDB中执行多行语句?如果不可能有一种解决方法仍然执行if子句或for循环?

答案

您可以在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会话。

另一答案

在Python(2.7.1)解释器或调试器(import pdb)中,您可以使用以下语法执行多行语句。

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

注意:当我在解释器中时,我必须在代码执行之前按两次返回。但是,在调试器内部,我只需要返回一次。

另一答案

在python3中,ipdb(和pdb)有一个名为interact的命令。它可以用于:

启动交互式解释器(使用code模块),其全局命名空间包含当前范围中找到的所有(全局和本地)名称。

要使用它,只需在pdb提示符下输入interact即可。除此之外,它对于应用跨越多行的代码以及避免意外触发其他pdb命令很有用。

另一答案

我的建议是使用IPython嵌入。

python
ipdb> from IPython import embed; embed()
另一答案

如果您希望在达到断点时执行几个命令,则会有特殊情况。然后是调试器命令commands。它允许您输入多行命令,然后使用end关键字结束整个序列。更多与(pdb) help commands

另一答案

我不知道你是否可以这样做,但这对于ipdb来说是一个很棒的功能。您当然可以使用列表推导,并执行简单的多行表达式,如:

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

您也可以预先编写一些函数来执行您需要完成的任何操作,通常需要多行。

另一答案

在文本编辑器中编写代码,然后将其粘贴到调试器中:

if True:
    print('a')

这是一个愚蠢的解决方案,但也快速和工作。它适用于Linux终端,但我不确定它是否适用于Windows控制台。

以上是关于如何在Python自己的调试器(PDB)中执行多行语句的主要内容,如果未能解决你的问题,请参考以下文章

Python原生调试工具pdb实践小结

用PDB库调试Python程序

Python pdb调试

python执行命令行调试工具pdb

pdb调试

python调试pdb