代码之家  ›  专栏  ›  技术社区  ›  Daniel Kluev

在Python中,什么是交互式调试的最佳方法?

  •  8
  • Daniel Kluev  · 技术社区  · 16 年前

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

    我需要进入shell(例如ipython)在特定的位置或特定的事件(如exception),将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)
    

    从'breakpoint'或try/except调用。但是,很明显,这需要大量的抛光,特别是要与线程应用程序一起正常工作。

    winpdb在控制台上有断点,但我找不到从中快速运行适当的python shell的方法,eval()/exec()对于长时间调试来说不是很方便。

    5 回复  |  直到 11 年前
        1
  •  2
  •   Wayne Werner    16 年前

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

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

        2
  •  3
  •   Joe Kington    16 年前

    就像你已经在做的一样, ipdb . 实际上,它是带有IPython外壳的PDB(即选项卡完成、所有各种魔力函数等)。

    它实际上做的正是你在问题中截取的小代码所做的,但是将它包装成一个简单的“ipdb.set_trace()”调用。

        3
  •  1
  •   Community Mohan Dere    9 年前

    我觉得这个问题 Python Drop into REPL 与你想做的相似,看一下(特别是 answer suggesting module 'code' )

        4
  •  0
  •   Ant    16 年前

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

        5
  •  0
  •   macedoine    16 年前

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