我通过对字符串进行一些预处理来创建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]
Run Code Online (Sandbox Code Playgroud)
我希望listpdb中的命令输出代码并显示我是哪一行,就像我在常规python文件中的断点处停止时一样.任何关于如何做到这一点的提示,或者另一种方法/心态都将不胜感激!
[编辑]
我使用exec的可选全局位置参数将一堆复杂的对象传递给exec,因此将字符串写入文件然后在pdb中运行它将无法正常工作.例如:
s = '''some_complicated_stateful_object.method(foo)'''
exec(s, {'some_complicated_stateful_object': an_object,
'foo': some_other_object})
Run Code Online (Sandbox Code Playgroud)
感谢您的好建议!
基本上,标题.
我试图追踪在大型代码库中发生虚假打印的位置,并且我想打破,或者在打印"发生"时以某种方式获得堆栈跟踪.有任何想法吗?