web-dev-qa-db-ja.com

リモートデバッガーをPythonプロセスにアタッチするにはどうすればよいですか?

挿入するのにうんざり

import pdb; pdb.set_trace()

Pythonプログラムとコンソールを介したデバッグ。

53
joeforker

Winpdb を使用します。 プラットフォームに依存しないグラフィカルなGPL Pythonネットワーク経由のリモートデバッグ、複数のスレッド、名前空間の変更をサポートするデバッガ、組み込みデバッグ、暗号化通信、およびpdbよりも最大20倍高速です。

特徴:

  • GPLライセンス。 Winpdbはフリーソフトウェアです。
  • CPython 2.3〜2.6およびPython 3000と互換性があります
  • WxPython 2.6〜2.8との互換性
  • プラットフォームに依存せず、Ubuntu GutsyおよびWindows XPでテスト済み。
  • ユーザーインターフェイス:rpdb2はコンソールベースですが、winpdbにはwxPython 2.6以降が必要です。

Screenshot
(ソース: winpdb.org

57
nosklo

さて、ねじれたマンホールを使用するのと非常に似たものを得ることができます。

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の両方のソケットチャネルを作成する必要があります。ツイストを使用して達成するのは難しいことではありません。

17
Johan Dahlin

少し遅れましたが、 http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible のおかげで非常に軽量なリモートデバッグソリューションがあります:

  1. リモートホスト上の_pip install epdb_。
  2. epdbは127.0.0.1ではなく、任意のアドレス(_INADDR_ANY_)をリッスンするため、ファイアウォールのセットアップがリモートホストのポート8080への非ローカル接続を許可していないことを確認してください。
  3. プログラムでimport pdb; pdb.set_trace()を使用する代わりに、import epdb; epdb.serve()を使用します。
  4. epdb.connect()はtelnetを使用するため、リモートホストに安全にログインします。
  5. python -c 'import epdb; epdb.connect()'を使用してプログラムに接続します。

もちろん、ローカルネットワークのセットアップとセキュリティスタンスに合わせてセキュリティビットを調整します。

12
CitizenB

最新のIDEからの2つのソリューション:

  1. PTVSクロスプラットフォームリモートデバッグ

  2. PyCharm/PyDevリモートデバッグ

2
denfromufa