2014-10-09 25 views
14

我使用ipdb.set_trace()每當我需要在我的代碼中設置斷點時。現在,我試圖在我使用multiprocessing創建的過程中使用它,而代碼確實停止,我無法輸入任何內容以繼續調試。有沒有辦法讓我的stdin正確導向?如何在分叉進程中使用ipdb.set_trace

理想情況下,我想象一個新的控制檯打開每次分叉進程停止調試,但我不認爲這是可能的。

+1

如果您驗證@ yoav-glazner給出的答案,那就太好了。您是否可以在更改_multiprocessing__ _dummy_之後使用鍵盤? – jgomo3 2016-02-15 15:08:31

+3

@ jgomo3我已經證實它可以工作,但我(個人)不覺得它回答我的問題 – Seanny123 2016-02-15 15:27:43

+0

我認爲,每次想要調試時都必須更改te代碼。有人可能會爭辯說你已經用pdb.set_trace()來做到這一點,但我知道你應該有另一種方法來實現同樣的功能,而無需更改代碼。 我不知道是否有辦法告訴pdb使用啞元而不是多處理導入的多處理?一種用於調試的monkeypatching/mocking。 – jgomo3 2016-02-16 16:27:57

回答

6

有時用於調試您可以更改您的代碼以使用multiprocessing.dummy。這樣,就不會完成分支,它將與線程一起工作,並且更易於調試。

上(錯誤被壓扁......後),您可以切換回多處理

multiprocessing.dummy後來 - 應該提供相同的API多處理這樣的一個簡單的變化...

+1

這是行不通的,但我寧願不切換到線程。 – Seanny123 2016-02-15 15:27:19