如何在Python中实现调试控制台?

如何在Python中实现调试控制台?,python,debugging,interactive,Python,Debugging,Interactive,我已经看到了一些Python IDE(例如PyDev扩展,WingIDE),它们提供了一个调试控制台——一个在断点所在的方法上下文中运行的交互式终端。这允许您打印成员、调用其他方法并查看结果,以及重新定义方法以尝试修复错误。酷 谁能告诉我这是如何实现的?我知道有代码模块,它提供了一个InteractiveConsole类,但我不知道如何在当前加载的代码的上下文中运行它。我是Python新手,因此非常感谢您的帮助 您可以尝试查看python调试器pdb。它的使用方式类似于gdb,但是用纯pytho

我已经看到了一些Python IDE(例如PyDev扩展,WingIDE),它们提供了一个调试控制台——一个在断点所在的方法上下文中运行的交互式终端。这允许您打印成员、调用其他方法并查看结果,以及重新定义方法以尝试修复错误。酷


谁能告诉我这是如何实现的?我知道有代码模块,它提供了一个InteractiveConsole类,但我不知道如何在当前加载的代码的上下文中运行它。我是Python新手,因此非常感谢您的帮助

您可以尝试查看python调试器pdb。它的使用方式类似于gdb,但是用纯python实现的。在python安装目录中查找pdb.py。



但是,我确信,它们的实现比这要安全得多。

Python中有一个调试器框架。我不确定IDE的you list是否使用它,但使用它实现完整的Python调试器肯定是可能的。

对,我很惭愧地承认,它实际上已经出现在InteractiveConsole的文档中了。通过将locals()函数的结果传递给InteractiveConsole构造函数,可以使其在本地上下文中运行。我无法找到一种在不关闭应用程序的情况下关闭InteractiveConsole的方法,因此我对其进行了扩展,以便在控制台捕获SystemExit异常时仅关闭控制台。我不喜欢,但我还没有找到更好的方法

下面是一些演示调试控制台的示例代码(相当简单)

import code

class EmbeddedConsole(code.InteractiveConsole):
    def start(self):
        try:
            self.interact("Debug console starting...")
        except:
            print("Debug console closing...")

def print_names():
    print(adam)
    print(bob)

adam = "I am Adam"
bob = "I am Bob"

print_names()
console = EmbeddedConsole(locals())
console.start()
print_names()

如果您想尝试使用自己的Python控制台,那么这是一个很好的开始:

cmd = None
while cmd != 'exit':
    cmd = raw_input('>>> ')
    try:
        exec(cmd)
    except:
        print 'exception'
但对于实际工作,请使用InteractiveConsole。

input()是否等同于eval(原始输入())?
cmd = None
while cmd != 'exit':
    cmd = raw_input('>>> ')
    try:
        exec(cmd)
    except:
        print 'exception'