Подтвердить что ты не робот

Как выйти из pdb и позволить программе продолжить?

Я использую модуль pdb для отладки программы. Я хотел бы понять, как я могу выйти из pdb и позволить программе продолжить работу до завершения. Программа рассчитана на дорогостоящие вычисления, поэтому я не хочу выходить без попытки script. continue, похоже, не работает. Как я могу выйти из pdb и продолжить свою программу?

4b9b3361

Ответ 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 и ваша программа запустится до следующей следующей другой точки останова.

Подробнее об этом см. руководство.