Я использую модуль pdb для отладки программы. Я хотел бы понять, как я могу выйти из pdb и позволить программе продолжить работу до завершения. Программа рассчитана на дорогостоящие вычисления, поэтому я не хочу выходить без попытки script. continue
, похоже, не работает. Как я могу выйти из pdb и продолжить свою программу?
Как выйти из pdb и позволить программе продолжить?
Ответ 1
continue
должен "Продолжать выполнение, останавливаться только при обнаружении точки останова", поэтому у вас есть точка останова, установленная где-то. Чтобы удалить точку останова (если вы вставили ее вручную):
(Pdb) break
Num Type Disp Enb Where
1 breakpoint keep yes at /path/to/test.py:5
(Pdb) clear 1
Deleted breakpoint 1
(Pdb) continue
Или, если вы используете pdb.set_trace()
, вы можете попробовать это (хотя, если вы используете pdb более причудливыми способами, это может нарушить ситуацию...)
(Pdb) pdb.set_trace = lambda: None # This replaces the set_trace() function!
(Pdb) continue
# No more breaks!
Ответ 2
Простой Ctrl - D вырвется из pdb. Если вы хотите продолжить, а не сломать, просто нажмите c, а не целую команду continue
Ответ 3
ответ от @voithos правильный, поэтому я просто добавлю одну альтернативу в случае, когда вы используете set_trace
. Да, взлом pdb.set_trace = lambda: None
работает нормально, но не в том случае, если у вас установлены другие точки останова и вы хотите включить его позже. Для меня это указывает на тот факт, что, к сожалению, в pdb
отсутствует куча функциональных возможностей (даже таких базовых вещей, как списки отображения), и это другой случай.
Хорошей новостью является то, что pdb++
является отличной заменой для pdb
, и одна из вещей, которую он решает, это именно проблема отключения set_trace
. Так что вы можете просто сделать:
pip install pdbpp
а затем в приглашении (Pdb++)
введите:
pdb.disable()
Если вы хотите включить позже, неудивительно, что это работает:
pdb.enable()
Легко! И помимо этого вы получите много других полезных вкусностей.
Ответ 4
Если вы действительно хотите выйти из отладчика, вам нужно запустить что-то вроде WinPdb, что позволяет вам отсоединиться от процесса, а затем выйдите из отладчика (NB Это многоплатформенный).
Если вы хотите продолжить отладку, но больше не останавливаться на заданной точке останова, вам необходимо:
- Запишите номер точки останова (или номер файла и строки),
- Либо
cl bp_number
илиclear file:line
для окончательного удаления точки останова илиdisable pb_number
, чтобы отключить ее, но иметь возможность переключать ее. - Затем
continue
и ваша программа запустится до следующей следующей другой точки останова.
Подробнее об этом см. руководство.