Frage

Ich bin es leid Einfügen

import pdb; pdb.set_trace()

Zeilen in meine Python-Programme und das Debugging über die Konsole. Wie verbinde ich einen Remote-Debugger und legen Sie Haltepunkte aus einer zivilisierten Benutzeroberfläche?

War es hilfreich?

Lösung

Winpdb . Es ist ein plattformunabhängig grafische GPL Python-Debugger mit Unterstützung für Remote-Debugging über ein Netzwerk, mehrere Threads, Namespace-Modifikation, eingebettete Debuggen, verschlüsselte Kommunikation und bis zu 20 mal schneller als pdb.

Features:

  • GPL-Lizenz. Winpdb ist Freie Software.
  • Kompatibel mit CPython 2.3 bis 2.6 und Python 3000
  • Kompatibel mit wxPython 2.6 bis 2.8
  • Plattform unabhängig und getestet auf Ubuntu Gutsy und Windows XP.
  • User Interfaces. Rpdb2 ist Konsole basiert, während Winpdb erfordert wxPython 2.6 oder höher


(Quelle: winpdb.org )

Andere Tipps

Nun, man kann etwas ganz ähnlich wie mit einem verdrehten Schacht bekommen, das funktioniert wie folgt:

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() 

Dann melde dich einfach auf das Programm über ssh;

$ ssh admin@localhost -p 2222
admin@localhost's password: 

Mit foobar als Passwort.

Wenn Sie sich einloggen Sie eine normale Python-Prompt bekommen, wo Sie die Daten nur stecken kann. Es ist nicht ganz dasselbe wie eine Rückverfolgung immer an einen Host geschickt.

Nun, dies könnte schwierig sein, zu einem GUI-Programm zu integrieren, in diesem Fall, dass Sie vielleicht einen anderen Reaktor wählen müssen, beispielsweise für gtk-basierte Programme verwendet, um die gtk2reactor etc.

Wenn Sie die tatsächlichen Zurückverfolgungs wollen gesendet über Sie einen Socket-Kanal für beide stderr, stdin und stdout erstellen müssen, die das Netzwerk übergehen statt Druck auf dem lokalen Rechner. Sollte nicht zu schwer sein, verdreht zu erreichen durch die Verwendung.

Ein wenig spät, aber hier ist eine sehr leichte Remote-Debugging-Lösung mit freundlicher Genehmigung von http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible :

  1. pip install epdb auf dem entfernten Rechner.
  2. Stellen Sie sicher, dass Ihre Firewall Setup nicht nicht-lokale Verbindungen zu Port ermöglicht 8080 auf der Remote-Host, da epdb Standardwerte auf jeder Adresse (INADDR_ANY) zu hören, nicht 127.0.0.1.
  3. Anstelle der Verwendung von import pdb; pdb.set_trace() in Ihrem Programm, verwendet import epdb; epdb.serve().
  4. log fest mit dem Remote-Host in, da epdb.connect() Telnet verwendet.
  5. Befestigen Sie das Programm mit python -c 'import epdb; epdb.connect()'.

, um die Sicherheit Bits Stellen Sie Ihre lokale Netzwerk-Setup und Sicherheit Haltung zu entsprechen, natürlich.

Zwei Lösungen von modernen IDEs:

  1. PTVs Cross-Plattform Remote-Debugging

  2. PyCharm / PyDev Remote-Debugging

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top