11

我见过几个提供调试控制台的 Python IDE(例如 PyDev Extensions、WingIDE)——一个在断点所在方法的上下文中运行的交互式终端。这使您可以打印成员、调用其他方法并查看结果,并重新定义方法以尝试修复错误。凉爽的。

谁能告诉我这是如何实现的?我知道有 Code 模块,它提供了一个 InteractiveConsole 类,但我不知道如何在当前加载的代码的上下文中运行它。我对 Python 还是很陌生,因此将不胜感激!

4

5 回答 5

6

您可以尝试查看 python 调试器 pdb。它就像 gdb 在你如何使用它,但在纯 python 中实现。在您的 python 安装目录中查找 pdb.py。

于 2009-01-14T22:18:13.970 回答
3

是的,我很惭愧地承认它实际上在 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()
于 2009-01-15T18:25:28.560 回答
2

http://docs.python.org/3.0/library/functions.html#input
http://docs.python.org/3.0/library/functions.html#eval

def start_interpreter():
     while(True):
          code = input("Python Console >")
          eval(code)

但是,我敢肯定,它们的实现比这更安全。

于 2009-01-14T22:53:16.193 回答
1

Python 在bdb 模块中有一个调试器框架。我不确定您列出的 IDE 是否使用它,但当然可以使用它实现完整的 Python 调试器。

于 2009-01-14T23:29:13.033 回答
0

如果您想尝试自己的 Python 控制台,那么这是一个不错的开始:

cmd = None
while cmd != 'exit':
    cmd = raw_input('>>> ')
    try:
        exec(cmd)
    except:
        print 'exception'

但对于实际工作,请改用 InteractiveConsole。

于 2010-01-26T17:14:48.360 回答