2014-10-09 4 views
14

Я использую ipdb.set_trace() всякий раз, когда мне нужно установить точку останова в моем коде. Прямо сейчас я пытаюсь использовать его в процессе, который я создал с помощью multiprocessing, в то время как код действительно останавливается, я не могу вводить что-либо, чтобы продолжить отладку. Есть ли способ получить мой stdin направленный правильно?Как использовать ipdb.set_trace в раздвоенном процессе

В идеале я хотел бы представить новое консольное открытие каждый раз, когда разветвленный процесс остановлен для отладки, однако я не думаю, что это возможно.

+1

Было бы неплохо, если вы подтвердите ответ, указанный @ yoav-glazner. Можете ли вы использовать клавиатуру после изменения _multiprocessing_ на _dummy_ ?. – jgomo3

+3

@ jgomo3 Я подтвердил, что он действительно работает, но я (лично) не чувствую, что он отвечает на мой вопрос – Seanny123

+0

Я полагаю, что вам приходилось менять код te каждый раз, когда вы хотите отлаживать. Можно было бы утверждать, что вы делаете это уже с pdb.set_trace(), но я знаю, что вы упали, должен быть другой способ добиться того же, не меняя код. Интересно, есть ли способ сообщить pdb использовать манекен вместо многопроцессорности для импорта многопроцессорности? Это своего рода monkeypatching/mocking для отладки. – jgomo3

ответ

2

Согласно How to attach debugger to a python subproccess?, http://winpdb.org поддерживает multiprocessing отладки.

Если вы предпочитаете делать больше работы для большей гибкости, есть интересные идеи в https://gist.github.com/csabahenk/6497709 (слишком долго для включения здесь).

+0

Вы пробовали WinPDB в приложении python3? Мне кажется, что это полезно только для отладки программ python2 – fstab

6

Иногда для отладки Вы можете изменить свой код, чтобы использовать multiprocessing.dummy. Таким образом, никакая вилка не будет выполнена, она будет работать с потоками и будет легче отлаживать.

Позже (после того, как ошибка сжато ...), вы можете переключиться на многопроцессорной

multiprocessing.dummy - должен предложить тот же интерфейс, как многопроцессорных так его легко изменить ...

+1

Это действительно работает, но я бы предпочел не переключиться на потоки. – Seanny123