8

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

我需要在特定位置或特定事件(如异常)处进入 shell(例如 IPython),并将 shell 的局部变量和全局变量设置为框架的局部变量和全局变量。

我自己的快速破解来说明它:

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)

根据来自“断点”或尝试/除外的 run_debug() 调用。但是,很明显,这需要大量的改进,尤其是要正确使用线程应用程序。

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

4

3 回答 3

3

与您已经在做的类似,有ipdb。实际上,它是带有 ipython 外壳的 pdb(即制表符完成,所有各种魔术函数等)。

它实际上正在执行您在问题中发布的小代码所做的事情,但将其包装到一个简单的“ipdb.set_trace()”调用中。

于 2010-07-22T15:24:53.310 回答
2

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

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

于 2010-07-22T14:31:23.220 回答
0

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

于 2010-07-22T15:18:05.283 回答