2014-10-09 11 views
14

Io uso ipdb.set_trace() ogni volta che ho bisogno di impostare un punto di interruzione nel mio codice. In questo momento, sto cercando di usarlo in un processo che ho creato usando multiprocessing, mentre il codice si ferma, non posso digitare nulla per continuare il debug. C'è un modo per ottenere il mio stdin diretto correttamente?Come utilizzare ipdb.set_trace in un processo a forcella

Idealmente, mi piacerebbe immaginare una nuova console che si apre ogni volta che un processo biforcato viene interrotto per il debug, tuttavia non penso sia possibile.

+1

Sarebbe bello se si verifica la risposta data da @ yoav-glazner. Sei in grado di usare la tastiera dopo aver cambiato _multiprocessing_ di _dummy_ ?. – jgomo3

+3

@ jgomo3 Ho confermato che funziona, ma io (personalmente) non ritengo che risponda alla mia domanda – Seanny123

+0

Suppongo per il fatto che dovevi cambiare il codice ogni volta che vuoi eseguire il debug. Si potrebbe obiettare che lo fai già con pdb.set_trace(), ma so che sei caduto dovrebbe essere un altro modo per ottenere lo stesso senza cambiare il codice. Mi chiedo se c'è un modo per dire a pdb di usare dummy invece di multiprocessing per l'importazione multiprocessing? Una sorta di monkeypatching/mocking per il debugging. – jgomo3

risposta

6

A volte per il debug È possibile modificare il codice per utilizzare multiprocessing.dummy. In questo modo, non verrà eseguito alcun fork, funzionerà con i thread e sarà più facile eseguire il debug.

Più tardi (dopo il bug è schiacciato ...) si può tornare alla multiprocessing

multiprocessing.dummy - dovrebbe offrire la stessa API di multiprocessing quindi la sua un cambiamento facile ...

+1

Funziona, ma preferisco non passare ai thread. – Seanny123