我想利用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()对于长时间调试来说不是很方便。
答案 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。