[英]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.