Как отлаживать скрипты Python, которые разветвляются - PullRequest
4 голосов
/ 01 сентября 2011

В отладчике perl я могу использовать DB :: get_fork_TTY () для отладки как родительского, так и дочернего процесса в разных терминалах. Есть ли что-нибудь подобное в отладчике Python? Или есть ли хороший способ отладки форка в python?

Ответы [ 5 ]

2 голосов
/ 01 сентября 2011

Вы можете эмулировать разветвленный процесс, если вы установите вместо fork и его условие (pid == 0) всегда True.Для отладки основного процесса будет работать отладчик.

Для отладки многопроцессорного взаимодействия лучше использовать подробные журналы, как для меня

1 голос
/ 14 августа 2017

Отладчик в pyCharm делает это красиво. Кажется, для этого используется gdb с поддержкой python, однако все учебники о том, как сделать это с помощью gdb от руки, которые я нашел до сих пор, не сработали для меня. В pyCharm это просто работает.

0 голосов
/ 30 мая 2014

Если в Python не удалены символы отладки и доступен gdb (версия выше 7.0), вы можете присоединиться к потомку и использовать команды pdb для его отладки с помощью:

pdb-clone --pid CHILD_PID

pdb-cloneнаходится в Pypi: http://pypi.python.org/pypi/pdb-clone/

0 голосов
/ 30 мая 2014

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

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

0 голосов
/ 01 сентября 2011

Но мне все еще любопытно, есть ли подобная функция в отладчике python.Я нахожу эту функцию в perldb и нахожу ее очень удобной

Нет.

Вам она не нужна.

Неважно, насколько это удобнопоявляются в других средах, вам это просто не нужно.

Вам не нужен fork() в Python;поэтому вам не нужна отлаженная отладка для работы с fork().

Если вы считаете, что вам нужен fork(), вы должны использовать subprocess, multiprocessing или C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...