Wie befestige ich einen Remote-Debugger zu einem Python-Prozess?
-
23-08-2019 - |
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?
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 :
-
pip install epdb
auf dem entfernten Rechner. - 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. - Anstelle der Verwendung von
import pdb; pdb.set_trace()
in Ihrem Programm, verwendetimport epdb; epdb.serve()
. - log fest mit dem Remote-Host in, da
epdb.connect()
Telnet verwendet. - 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:
-
PTVs Cross-Plattform Remote-Debugging
-
PyCharm / PyDev Remote-Debugging