挿入飽きた
import pdb; pdb.set_trace()
私のPythonプログラムに行を追加し、コンソールを介してデバッグします。リモート デバッガーを接続し、文明化されたユーザー インターフェイスからブレークポイントを挿入するにはどうすればよいですか?
挿入飽きた
import pdb; pdb.set_trace()
私のPythonプログラムに行を追加し、コンソールを介してデバッグします。リモート デバッガーを接続し、文明化されたユーザー インターフェイスからブレークポイントを挿入するにはどうすればよいですか?
Winpdbを使用します。これは、ネットワークを介したリモートデバッグ、複数のスレッド、名前空間の変更、組み込みデバッグ、暗号化通信をサポートするプラットフォームに依存しないグラフィカルGPL Pythonデバッガーであり、pdbよりも最大20倍高速です。
特徴:
(ソース:winpdb.org)
さて、ねじれたマンホールを使用して、次のように機能するものと非常によく似たものを得ることができます。
from twisted.internet import reactor
from twisted.cred import portal, checkers
from twisted.conch import manhole, manhole_ssh
def getManholeFactory(namespace):
realm = manhole_ssh.TerminalRealm()
def getManhole(_):
return manhole.Manhole(namespace)
realm.chainedProtocolFactory.protocolFactory = getManhole
p = portal.Portal(realm)
p.registerChecker(
checkers.InMemoryUsernamePassword DatabaseDontUse(admin='foobar'))
f = manhole_ssh.ConchFactory(p)
return f
reactor.listenTCP(2222, getManholeFactory(globals()))
reactor.run()
次に、ssh 経由でプログラムにログインするだけです。
$ ssh admin@localhost -p 2222
admin@localhost's password:
パスワードとしてfoobarを使用します。
ログインすると、通常の python プロンプトが表示され、そこでデータを突っ込むことができます。これは、ホストにトレースバックを送信することとまったく同じではありません。
さて、これを GUI プログラムに統合するのは難しいかもしれません。その場合、gtk2reactor などを使用する gtk ベースのプログラムなど、別のリアクターを選択する必要があるかもしれません。
実際のトレースバックを送信したい場合は、ローカル ホストに出力する代わりに、ネットワーク経由で stderr、stdin、および stdout の両方にソケット チャネルを作成する必要があります。ツイストを使用して達成するのはそれほど難しくありません。
最新の IDE による 2 つのソリューション:
PTVS クロスプラットフォーム リモート デバッグ
PyCharm/PyDev リモート デバッグ