逐步执行在pdb中使用exec调用的代码

时间:2016-12-14 19:46:54

标签: python exec pdb

我通过对字符串进行一些预处理来创建DSL,然后使用exec使用python解释器调用预处理的代码。我希望能够使用pdb逐步执行预处理代码,并能够显示我正在逐步执行的python代码的实际行(在预处理之后)。

例如:

In [1]: s = '''print "hello"
   ...: print 'world'
   ...: '''

In [2]: s
Out[2]: 'print "hello"\nprint \'world\'\n'

In [3]: import pdb

In [4]: pdb.run(s)
> <string>(1)<module>()
(Pdb) list
[EOF]

我希望pdb中的list命令输出代码并显示我所在的行,就像我在常规python文件中的断点处停止时一样。任何关于如何做到这一点的提示,或者另一种方法/心态都将不胜感激!

[编辑]

我使用exec的可选全局位置参数将一堆复杂的对象传递给exec,因此将字符串写入文件然后在pdb中运行该文件将无法正常工作。例如:

s = '''some_complicated_stateful_object.method(foo)'''

exec(s, {'some_complicated_stateful_object': an_object,
         'foo': some_other_object})

感谢您的好建议!

0 个答案:

没有答案