55

挿入飽きた

import pdb; pdb.set_trace()

私のPythonプログラムに行を追加し、コンソールを介してデバッグします。リモート デバッガーを接続し、文明化されたユーザー インターフェイスからブレークポイントを挿入するにはどうすればよいですか?

4

5 に答える 5

56

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

特徴:

  • GPLライセンス。Winpdbは自由ソフトウェアです。
  • CPython2.3から2.6およびPython3000と互換性があります
  • wxPython2.6から2.8と互換性があります
  • プラットフォームに依存せず、UbuntuGutsyとWindowsXPでテストされています。
  • ユーザーインターフェイス:rpdb2はコンソールベースですが、winpdbにはwxPython2.6以降が必要です。

スクリーンショット
(ソース:winpdb.org

于 2009-02-13T05:32:18.313 に答える
17

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

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

于 2009-02-12T21:07:19.540 に答える
3

最新の IDE による 2 つのソリューション:

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

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

于 2015-03-02T15:37:29.857 に答える