繁体   English   中英

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

[英]How are debug consoles implemented in Python?

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

谁能告诉我这是如何实现的? 我知道有代码模块,它提供了一个InteractiveConsole类,但我不知道如何在当前加载的代码的上下文中运行它。 我是Python的新手,所以温和的帮助将不胜感激!

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

是的,我很惭愧承认它毕竟是在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()

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)

但是,我确信他们的实施比这更加愚蠢。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM