挿入するのにうんざり
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の両方のソケットチャネルを作成する必要があります。ツイストを使用して達成するのは難しいことではありません。
少し遅れましたが、 http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible のおかげで非常に軽量なリモートデバッグソリューションがあります:
pip install epdb
_。epdb
は127.0.0.1ではなく、任意のアドレス(_INADDR_ANY
_)をリッスンするため、ファイアウォールのセットアップがリモートホストのポート8080への非ローカル接続を許可していないことを確認してください。import pdb; pdb.set_trace()
を使用する代わりに、import epdb; epdb.serve()
を使用します。epdb.connect()
はtelnetを使用するため、リモートホストに安全にログインします。python -c 'import epdb; epdb.connect()'
を使用してプログラムに接続します。もちろん、ローカルネットワークのセットアップとセキュリティスタンスに合わせてセキュリティビットを調整します。
最新のIDEからの2つのソリューション:
PTVSクロスプラットフォームリモートデバッグ
PyCharm/PyDevリモートデバッグ