Wie Anhängen des Debuggers an ein python-subproccess?
Ich Debuggen müssen, ein Kind-Prozess erzeugt, indem multiprocessing.Process()
. Die pdb
degugger scheint zu sein, nichts von "forking" und nicht in der Lage zu befestigen, in bereits laufende Prozesse.
Gibt es intelligentere python-Debugger, die angeschlossen werden können, um einen Teilprozess?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Winpdb ist so ziemlich die definition von intelligenter Python-debugger. Es unterstützt explizit going down Gabel, nicht sicher, es funktioniert gut mit
multiprocessing.Process()
aber einen Versuch ist es Wert.Für eine Liste von Kandidaten zu überprüfen, wenn Sie Unterstützung für Ihren Fall finden Sie in der Liste Python-Debugger in der wiki.
import pdb; pdb.set_trace()
. Jedoch, die ForkedPdb Antwort hier arbeitete wie ein Charme!Ich habe die Suche nach einer einfachen Lösung für dieses problem und kam mit dieser:
Es verwenden die gleiche Weise könnten Sie die klassischen Pdb:
/dev/stdin
. Ich weiß nicht, wieso, aber readline funktioniert dann. Ich werde die Forschung ein bisschen dazu später.Dies ist eine Ausarbeitung von Romuald Antwort, das wieder die original stdin über Datei-Deskriptor. Dies hält readline arbeiten im debugger. Außerdem pdb speziellen management von KeyboardInterrupt deaktiviert ist, um es nicht zu stören, multiprocessing sigint-handler.
This keeps readline working inside the debugger
was bedeutet das ?Gebäude auf @memplex Idee, ich musste es ändern, um es an die Arbeit mit
joblib
durch die Einstellung dersys.stdin
im Konstruktor als auch die übergabe direkt an der via joblib.Eine Idee, die ich hatte, war die Schaffung von "dummy" - Klassen zu fake die Umsetzung der Methoden, die Sie verwenden, von multiprocessing:
Wenn Sie auf einer unterstützten Plattform, versuchen DTrace. Die meisten BSD /Solaris /OS-X-Familie Unterstützung von DTrace.
Hier ist ein intro von der Autorin. Sie können verwenden Sie Dtrace zum Debuggen einfach über alles.
Hier ist SO ein post auf das lernen DTrace.