Использование метода точки останова - PullRequest
0 голосов
/ 11 декабря 2018

Я новичок в python и не уверен, как работает метод точки останова.Открывает ли он отладчик для IDE или какой-либо встроенный отладчик?

Кроме того, мне было интересно, как этот отладчик сможет работать.

Например, я использую Spyder, делаетэто означает, что если я использую метод breakpoint (), откроется отладчик Spyder, с помощью которого я могу открыть выпадающее меню Debugger, или откроется какой-нибудь другой отладчик?

Я также хотел бы знать, как эта функция работает вв сочетании с методом breakpointhook ().

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Поведение по умолчанию встроенной функции breakpoint() заключается в открытии отладчика pdb в этой точке.

То есть по умолчанию строка

breakpoint()

Должен вести себя идентично

import pdb; pdb.set_trace()

Поведение можно настроить (например, открыть другой отладчик), изменив sys.breakpointhook.Как правило, единственный раз, когда вы делаете это, это если вы внедряете отладчик или что-то, что функционирует как отладчик.Если вы запускаете код из IDE, сама IDE должна изменить sys.breakpointhook, чтобы открыть отладчик IDE.(Я не знаю, действительно ли все Python IDE делают это, но они должны.)

Для получения дополнительной информации, включая обоснование того, почему эта функция была добавлена, см. Предложение PEP 553 ,Фактическая реализация была включена в Python 3.7.

0 голосов
/ 11 декабря 2018

Нет, отладчик не откроется автоматически вследствие установки точки останова.

Итак, вы сначала установили точку останова (или несколько из них) , а затем вручную запустите отладчик .

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

  • проверка значений переменных,
  • установить переменные вручную на другие значения ,
  • продолжить выполнять инструкции шаг за шагом (то есть только в следующеминструкция ),
  • продолжить выполнение инструкций до следующей точки останова ,
  • преждевременно прекратить отладку вашей программы.

Это общий сценарий для всех отладчиков всех языков программирования (и их IDE).

Для IDE запуск отладчика будет

  • включить или показать инструкции по отладке в их системе меню,
  • отобразить для них панель инструментов и
  • активировать для них горячие клавиши.

Без установки хотя бы одной точки останова, большинство отладчиков выполняют всю программу без паузы (как запуск безотладчик), поэтому у вас не будет возможности выполнить какую-либо задачу отладки.

(Некоторые IDE имеют возможность запустить отладчик в «сначала инструкция, затем пауза» mode, поэтому вам не нужно заранее устанавливать точки останова в этом случае.)


Да, встроенная функция breakpoint() (введенная в Python 3.7) прекращает выполнение вашейпрограмма входит в режим отладки, и вы можете использовать раскрывающееся меню отладчика Spyder.

(Это не отладчик Spyders , только его раскрывающийся списокменю ;используемый отладчик по-прежнему будет pdb, то есть по умолчанию P ython D e B ugger.)

Соединение междуВстроенная функция breakpoint() и функция breakpointhook() (из встроенного модуля sys) очень просты - первый напрямую вызывает второй.

Естественный вопрос - , почему нам нужны две функции с одинаковым поведением?

Ответ в design - функция breakpoint() может быть изменена косвенно , изменяя поведение функции breakpointhook().

Например, создатели IDE могут изменить поведение функции breakpointhook(), чтобы она запускала свой собственный отладчик , а не pdb один.

...