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


112

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


2
continueвыходит из циклов, returnвыходит из методов / функций
Стефан

7
@ Стефан: Он говорит о continueкоманде pdb. Не заявление Python.
voithos

1
@turtle: continueследует «Продолжать выполнение, останавливаться только при обнаружении точки останова», согласно документации. У вас есть установленная точка останова?
voithos

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

1
@turtle: У вас есть точка останова, установленная в Pdb, или у вас есть pdb.set_trace()в исходном коде?
voithos

Ответы:


191

continueshould «Продолжить выполнение, останавливаться только при обнаружении точки останова», поэтому у вас где-то установлена ​​точка останова. Чтобы удалить точку останова (если вы вставили ее вручную):

(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!

10
Выше , не выход PDB.
Стив Барнс,

7
Про 15-е слово вопроса!
Стив Барнс

13
@SteveBarnes: Я думаю, ты понимаешь это слишком буквально. OP просто снова и снова попадает в точку останова. Все, что им нужно, - это продолжить свой длительный процесс, не достигая точек останова. Независимо от того, запущен ли Pdb на самом деле или нет.
voithos

35
Хороший совет по настройке set_trace = lambda: None:)
randlet 08

2
На крайний случай ничего не сравнится set_trace = lambda: None. Организация Python должна добавить команду, которая просто позволяет вам выйти из pdb.
ErezO

26

Простой Ctrl- Dвылезет из pdb. Если вы хотите продолжить, а не прерывать работу, просто нажмите, cа не всю continueкоманду


7
Что насчет того, когда вы находитесь внутри функции, внутри цикла? Кажется, для меня просто переход к следующему циклу, и я не могу закрыть pdb или даже закрыть python, не закрывая весь терминал?
Марсес 08

@LimokPalantaemon Weird, вы пробовали печатать?exit
Минь Триет

Это не сработает, если вы установили трассировку или если у вас есть точки останова, если вы не продолжите нажимать c.
Alex

неловко, но это спасло меня от слишком долгого застревания -_-
jmcg

7

Ответ от @voithos правильно, так что я просто добавить одну альтернативу в том случае , если вы используете set_trace. Да, pdb.set_trace = lambda: Noneвзлом работает нормально, но не в том случае, если у вас установлены другие точки останова и вы хотите снова включить его позже. Для меня это указывает на то, что, к сожалению, pdbне хватает множества функций (даже таких базовых вещей, как списки отображения), и это другой случай.

Хорошая новость заключается в том, что pdb++это отличная замена pdb, и одна из вещей, которую она решает, - это как раз проблема отключения set_trace. Итак, вы можете просто сделать:

pip install pdbpp

а затем в (Pdb++)командной строке введите:

pdb.disable()

Если вы хотите снова включить его позже, неудивительно, что это сработает:

pdb.enable()

Легко! А еще вы получите много других полезных вкусностей.


4

Если вы действительно хотите выйти из отладчика, вам нужно запустить что-то вроде WinPdb, которое позволяет вам отключиться от процесса, а затем выйти из отладчика (NB, это многоплатформенный).

Если вы хотите продолжить отладку, но больше не останавливаетесь на заданной точке останова, вам необходимо:

  1. Запишите номер точки останова (или номер файла и строки),
  2. Либо cl bp_number или, clear file:line чтобы навсегда удалить точку останова либо disable pb_number отключить ее, но иметь возможность переключить обратно.
  3. Тогда continueи ваша программа будет работать до следующегобудет достигнута другая точка останова.

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


0

найдите новый способ выйти из pdb, ничего не устанавливая: - когда программа начнет работать, нажмите ctrl + c, затем переключите окно на другое (любое окно), тогда исходная оболочка с запущенным pdb должна показать что-то вроде: (pdb) ..... - переключитесь обратно на pdb, затем нажмите Enter, теперь все готово, командная оболочка pdb снова появляется

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.