2014-10-09 33 views
14

Używam ipdb.set_trace(), gdy potrzebuję ustawić punkt przerwania w moim kodzie. Obecnie próbuję go użyć w procesie, który utworzyłem przy użyciu multiprocessing, podczas gdy kod się zatrzymuje, nie mogę wpisać niczego, aby kontynuować debugowanie. Czy istnieje sposób na poprawne kierowanie moim stdin?Sposób korzystania z pliku ipdb.set_trace w rozwidlonym procesie

Idealnie chciałbym sobie wyobrazić otwarcie nowej konsoli za każdym razem, gdy rozwidlony proces zostanie zatrzymany do debugowania, ale nie sądzę, że jest to możliwe.

+1

Byłoby miło, gdyby zweryfikować odpowiedź udzieloną przez @ yoav-glazner. Czy możesz używać klawiatury po zmianie _multiprocessingu_ przez _dummy_ ?. – jgomo3

+3

@ jgomo3 Potwierdziłem, że to działa, ale ja (osobiście) nie czuję, że to odpowiada na moje pytanie – Seanny123

+0

Przypuszczam, że za każdym razem, gdy chcesz debugować, musisz zmienić kod. Można argumentować, że robisz to już za pomocą pdb.set_trace(), ale wiem, że spadłeś, powinieneś mieć inny sposób na osiągnięcie tego samego bez zmiany kodu. Zastanawiam się, czy istnieje sposób na powiedzenie pdb, aby zamiast importu wieloprocesowego używał manekina zamiast wieloprocesowości? Rodzaj monkeypatching/kpiny do debugowania. – jgomo3

Odpowiedz

6

Czasami do debugowania Możesz zmienić swój kod, aby użyć multiprocessing.dummy. W ten sposób nie dojdzie do rozwidlenia, będzie działać z wątkami i będzie łatwiejsze do debugowania.

Później (po bug jest zgnieciony ...) można przełączyć z powrotem do Multiprocessing

multiprocessing.dummy - powinny oferować ten sam API jako wieloprocesorowe więc jego łatwą zmianę ...

+1

To działa, ale wolałbym nie przełączać się na wątki. – Seanny123