如何在pdb中定义一个新函数

How to define a new function in pdb

为什么我在运行pdb时不能定义新函数?

例如取myscript.py:

#!/gpfs0/export/opt/anaconda-2.3.0/bin/python
print "Hello World"
print "I see you"

如果我 运行 python -m pdb myscript.py 并尝试以交互方式定义一个新函数:

def foo():

我收到错误:

*** SyntaxError: unexpected EOF while parsing (<stdin>, line 1)

这是为什么?

我认为它不支持多行输入。您可以通过在 pdb 中生成交互式会话来解决此问题。完成交互式会话后,使用 Ctrl+D 退出。

>>> import pdb
>>> pdb.set_trace()
(Pdb) !import code; code.interact(local=vars())
(InteractiveConsole)
In : def foo():
...:     print('hello in pdb')
...: 
In : # use ctrl+d here to return to pdb shell...
(Pdb) foo()
hello in pdb

您可以使用 ; 而不是缩进在一行语句中定义您的函数,如下所示:

(Pdb) def foo(): print 'Hello world'; print 'I see you'
(Pdb) foo()
Hello world
I see you

我能够从 pdb 命令行导入 python 模块。

如果您可以导入 python 个模块,那么您应该能够在文件中定义您的函数并只导入该文件。

如果您的应用程序恰好有 IPython 作为依赖项,您可以直接从 ipdb 进入功能丰富的 IPython REPL:

import IPython; IPython.embed()

从内部来看,如果您使用运行 IPython的魔法命令whos,您应该会在当前pdb帧中看到所有本地定义的变量。