小编use*_*826的帖子

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

我通过对字符串进行一些预处理来创建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)

感谢您的好建议!

python exec pdb

6
推荐指数
0
解决办法
307
查看次数

是否有一个技巧打破内置的pdb打印?

基本上,标题.

我试图追踪在大型代码库中发生虚假打印的位置,并且我想打破,或者在打印"发生"时以某种方式获得堆栈跟踪.有任何想法吗?

python printing stack-trace pdb

5
推荐指数
1
解决办法
454
查看次数

标签 统计

pdb ×2

python ×2

exec ×1

printing ×1

stack-trace ×1