簡體   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