11

デバッグ コンソール (ブレークポイントがあるメソッドのコンテキストで実行される対話型ターミナル) を提供する Python IDE (PyDev Extensions、WingIDE など) をいくつか見てきました。これにより、メンバーを出力し、他のメソッドを呼び出して結果を確認し、メソッドを再定義してバグを修正することができます。涼しい。

これがどのように実装されているか誰か教えてもらえますか? InteractiveConsole クラスを提供する Code モジュールがあることは知っていますが、現在ロードされているコードのコンテキストでこれを実行する方法がわかりません。私は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 に答える