2014-10-09 12 views
14

ich ipdb.set_trace() verwenden verwenden, wenn ich einen Haltepunkt in meinem Code einstellen muß. Gerade jetzt, ich versuche es in einem Prozess verwendet werden, die ich habe multiprocessing erstellt mit, während der Code nicht aufhören, ich kann nichts geben Debuggen fortzusetzen. Gibt es eine Möglichkeit, meine stdin richtig gerichtet zu bekommen?Wie ipdb.set_trace in einem gegabelten Prozess

Im Idealfall würde Ich mag eine neue Konsole Öffnung vorstellen, jedes Mal ein gegabelter Prozess zum Debuggen gestoppt wird, aber ich glaube nicht, das ist möglich.

+1

Es wäre schön, wenn Sie die von @ yoav-Glazner gegebene Antwort überprüfen. Können Sie Ihre Tastatur nach dem Ändern von _multiprocessing_ von _dummy_ verwenden? – jgomo3

+3

@ jgomo3 habe ich bestätigt, es funktioniert, aber ich (persönlich) nicht das Gefühl, es ist meine Frage beantwortet – Seanny123

+0

ich für die Tatsache an, dass Sie jedes Mal, wenn Sie wollen, debuggen Te-Code ändern mußten. Man könnte argumentieren, dass du es schon mit pdb.set_trace() machst, aber ich weiß, dass du da hinfielst, sollte es einen anderen Weg geben, dasselbe zu erreichen, ohne den Code zu ändern. Ich frage mich, ob es eine Möglichkeit gibt, pdb zu sagen, Dummy anstelle von Multiprocessing für den Multiprocessing-Import zu verwenden? Eine Art Monkeypatching/Mocking für das Debugging. – jgomo3

Antwort

6

Manchmal zum Debuggen Sie können Ihren Code ändern, um multiprocessing.dummy zu verwenden. Auf diese Weise wird keine Verzweigung ausgeführt, es wird mit Threads arbeiten und einfacher zu debuggen sein.

Später (nach dem Bug quetscht ...) Sie zurück zu wechseln Multiprozessing

multiprocessing.dummy - die gleiche API bieten sollte seine eine einfache Änderung wie Multiprozessing so ...

+1

Das funktioniert, aber ich möchte lieber nicht zu Threads wechseln. – Seanny123