在python中进行交互式调试的最佳方法是什么?

时间:2010-07-22 14:23:31

标签: python debugging pdb

我想利用python的内省功能进行调试/开发,但找不到合适的工具。

我需要在特定位置或特定事件(例如异常)进入shell(例如IPython),将shell的locals和globals设置为框架的。

我自己的快速黑客来说明它:

import inspect
from IPython.Shell import IPShellEmbed
def run_debug():
    stack = inspect.stack()
    frame = stack[1][0]
    loc = frame.f_locals
    glob = frame.f_globals
    shell = IPShellEmbed()
    shell(local_ns=loc, global_ns=glob)

使用来自'breakpoint'的run_debug()调用或try / except。但是,显然,这需要很多抛光,尤其是正确使用线程应用程序。

winpdb在控制台上有断点,但我发现无法从中快速运行正确的python shell,并且eval()/ exec()对于长时间调试来说不是很方便。

5 个答案:

答案 0 :(得分:3)

与您已经在做的类似,有ipdb。实际上,它是带有ipython shell的pdb(即标签完成,所有各种魔术功能等)。

它实际上正在完成您在问题中发布的小代码剪切的内容,但将其包装到一个简单的“ipdb.set_trace()”调用中。

答案 1 :(得分:2)

出于个人/教育目的,您可以使用WingIDE - 它们具有一些非常可靠的调试功能。

当然,如果您只是担心更改价值,您可以随时使用raw_input() - 但这可能不足以满足您的需求。

答案 2 :(得分:1)

我认为问题Python Drop into REPL与您想要做的类似,请查看(尤其是answer suggesting module 'code')...

答案 3 :(得分:0)

PyScripter(FOSS)内置了一个非常好的调试器。

答案 4 :(得分:0)

如果从ipython运行代码并遇到异常,则可以在之后调用%debug以在异常时放入pdb。这应该给你你想要的。或者如果你运行ipython -pdb,当发生未捕获的异常时,你将自动被放入pdb。