Есть ли способ отладки подпроцесса с использованием pydev?

Я использую Eclipse/PyDev, пытаясь найти способ отладки кода, который использует subprocess.Popen для создания дочернего процесса: я хочу иметь возможность отлаживать созданный дочерний процесс. Проблема в том, что я не могу найти способ отлаживать границы процесса, и я предполагаю, что на самом деле это невозможно. Тем не менее, вы никогда не узнаете, пока не спросите, и что я делаю!

Немного фона: у меня сложный процесс сборки, обусловленный Waf, который вызывает наши модульные тесты, вызывая nose по мере необходимости: я хочу подключиться к этим процессам для отладки unit test сбоев. Я знаю, что могу попытаться запустить нос напрямую, но проблема в том, что среда, которую я должен настроить для правильного загрузки наших модулей, довольно сложна, и я не хочу дублировать код, чтобы сделать это, если я могу избежать этого.

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

Ответ 2

Я нашел кое-что обходное решение, которое может сработать для вас.

Как и вы, я впервые обнаружил, что удаленная опция отладки вручную вставляет вызовы pydevd.settrace() в нужные точки останова. Но я также заметил, что последующие контрольные точки PyDev (т.е. Созданные кликом в левом поле) соблюдались. Похоже, вам просто нужен первый явный вызов setset для установки сеанса удаленной отладки для процесса, а затем просто используйте обычные точки останова отладчика.

Кроме того, вы можете изменить вызов отладки, чтобы он фактически не приостановил процесс:

import pydevd
pydevd.settrace(suspend=False)

Поэтому вставьте вышеуказанный код где-нибудь в начале инициализации подпроцесса, и вы должны быть хорошими. Еще немного взлома, но это определенно лучше, чем ручной метод.