bdb
— Платформа отладчика¶
Исходный код: Lib/bdb.py
Модуль bdb
обрабатывает основные функции отладчика, такие как установка точек останова или управление выполнением с помощью отладчика.
Определено следующее исключение:
Модуль bdb
также определяет два класса:
- class bdb.Breakpoint(self, file, line, temporary=False, cond=None, funcname=None)¶
Этот класс реализует временные точки останова, количество игнорирований, отключение и (повторное) включение, а также условные обозначения.
Точки останова индексируются по номеру в списке с именем
bpbynumber
и по парам(file, line)
черезbplist
. Первая указывает на единственный экземпляр классаBreakpoint
. Последнее указывает на список таких экземпляров, поскольку в каждой строке может быть более одной точки останова.При создании точки останова, связанная с ней
file name
должна быть в канонической форме. Если заданаfuncname
, точка остановаhit
будет засчитана при выполнении первой строки этой функции. Точка остановаconditional
всегда имеет значениеhit
.Breakpoint
экземпляры имеют следующие методы:- deleteMe()¶
Удалите точку останова из списка, связанного с файлом/строкой. Если это последняя точка останова в данной позиции, то также удаляется запись для файла/строки.
- enable()¶
Отметьте точку останова как включенную.
- disable()¶
Отметьте точку останова как отключенную.
- bpformat()¶
Возвращает строку со всей информацией о точке останова, красиво отформатированную:
Номер точки останова.
Временный статус (исключен или сохранен).
Положение файла/строки.
Условие разрыва.
Количество раз, которое нужно проигнорировать.
Количество попаданий.
Добавлено в версии 3.2.
- bpprint(out=None)¶
Выведите выходные данные
bpformat()
в файл out, или, если этоNone
, в стандартный вывод.
Breakpoint
экземпляры имеют следующие атрибуты:- file¶
Имя файла
Breakpoint
.
- line¶
Номер строки
Breakpoint
внутриfile
.
- temporary¶
Истинно, если
Breakpoint
значение at (файл, строка) является временным.
- cond¶
Условие для вычисления
Breakpoint
в (файл, строка).
- funcname¶
Имя функции, которое определяет, будет ли нажата клавиша
Breakpoint
при входе в функцию.
- enabled¶
Значение True, если включено значение
Breakpoint
.
- bpbynumber¶
Числовой индекс для одного экземпляра
Breakpoint
.
- bplist¶
Словарь экземпляров
Breakpoint
, проиндексированных с помощью (file
,line
) кортежей.
- ignore¶
Количество раз, когда следует игнорировать
Breakpoint
.
- hits¶
Подсчитывается, сколько раз была нажата клавиша
Breakpoint
.
- class bdb.Bdb(skip=None)¶
Класс
Bdb
действует как универсальный базовый класс отладчика Python.Этот класс заботится о деталях трассировки; производный класс должен реализовывать взаимодействие с пользователем. Примером может служить стандартный класс отладчика (
pdb.Pdb
).Аргумент skip, если он задан, должен быть повторяемым из шаблонов имен модулей в стиле glob. Отладчик не будет переходить к фреймам, которые исходят из модуля, соответствующего одному из этих шаблонов. Считается ли кадр исходящим из определенного модуля, определяется значением
__name__
в глобальных параметрах кадра.Изменено в версии 3.1: Добавлен параметр пропустить.
Следующие методы
Bdb
обычно не нуждаются в переопределении.- canonic(filename)¶
Возвращает каноническую форму filename.
Для реальных имен файлов каноническая форма зависит от операционной системы,
case-normalized
absolute path
. Имя файла * с угловыми скобками, например"<stdin>"
, сгенерированное в интерактивном режиме, возвращается без изменений.
- reset()¶
Установите для атрибутов
botframe
,stopframe
,returnframe
иquitting
значения, готовые к началу отладки.
- trace_dispatch(frame, event, arg)¶
Эта функция устанавливается как функция трассировки отлаженных кадров. Ее возвращаемым значением является новая функция трассировки (в большинстве случаев, то есть она сама).
Реализация по умолчанию решает, как отправить фрейм, в зависимости от типа события (передаваемого в виде строки), которое должно быть выполнено. событие может быть одним из следующих:
"line"
: Будет выполнена новая строка кода."call"
: Вот-вот будет вызвана функция или введен другой блок кода."return"
: Вот-вот будет возвращена функция или другой блок кода."exception"
: Произошло исключение."c_call"
: Вот-вот будет вызвана функция языка Си."c_return"
: Возвращена функция языка Си."c_exception"
: Функция C вызвала исключение.
Для событий Python вызываются специализированные функции (см. ниже). Для событий C не выполняется никаких действий.
Параметр arg зависит от предыдущего события.
Смотрите документацию для
sys.settrace()
для получения дополнительной информации о функции трассировки. Для получения дополнительной информации о коде и фреймовых объектах обратитесь к Иерархия стандартных типов.
- dispatch_line(frame)¶
Если отладчик должен остановиться на текущей строке, вызовите метод
user_line()
(который должен быть переопределен в подклассах). Создайте исключениеBdbQuit
, если установлен флагquitting
(который может быть установлен с помощьюuser_line()
). Верните ссылку на методtrace_dispatch()
для дальнейшего отслеживания в этой области.
- dispatch_call(frame, arg)¶
Если отладчик должен остановиться при вызове этой функции, вызовите метод
user_call()
(который должен быть переопределен в подклассах). Создайте исключениеBdbQuit
, если установлен флагquitting
(который может быть установлен с помощьюuser_call()
). Верните ссылку на методtrace_dispatch()
для дальнейшего отслеживания в этой области.
- dispatch_return(frame, arg)¶
Если отладчик должен остановиться при возврате этой функции, вызовите метод
user_return()
(который должен быть переопределен в подклассах). Создайте исключениеBdbQuit
, если установлен флагquitting
(который может быть установлен с помощьюuser_return()
). Верните ссылку на методtrace_dispatch()
для дальнейшего отслеживания в этой области.
- dispatch_exception(frame, arg)¶
Если отладчик должен остановиться на этом исключении, он вызывает метод
user_exception()
(который должен быть переопределен в подклассах). Создайте исключениеBdbQuit
, если установлен флагquitting
(который может быть установлен с помощьюuser_exception()
). Верните ссылку на методtrace_dispatch()
для дальнейшего отслеживания в этой области.
Обычно производные классы не переопределяют следующие методы, но они могут это сделать, если захотят переопределить определение остановки и точек останова.
- is_skipped_line(module_name)¶
Возвращает значение True, если имя_модуля соответствует какому-либо шаблону пропуска.
- stop_here(frame)¶
Возвращает значение True, если frame находится ниже начального кадра в стеке.
- break_here(frame)¶
Возвращает значение True, если для этой строки существует эффективная точка останова.
Проверьте, существует ли и действует ли точка останова строки или функции. Удалите временные точки останова на основе информации из
effective()
.
- break_anywhere(frame)¶
Возвращает значение True, если для имени файла frame существует какая-либо точка останова.
Производные классы должны переопределять эти методы, чтобы получить контроль над работой отладчика.
- user_call(frame, argument_list)¶
Вызывается из
dispatch_call()
, если разрыв может прекратиться внутри вызываемой функции.
- user_line(frame)¶
Вызывается из
dispatch_line()
, когда либоstop_here()
, либоbreak_here()
возвращаетTrue
.
- user_return(frame, return_value)¶
Вызывается из
dispatch_return()
, когдаstop_here()
возвращаетTrue
.
- user_exception(frame, exc_info)¶
Вызывается из
dispatch_exception()
, когдаstop_here()
возвращаетTrue
.
- do_clear(arg)¶
Определяет, как должна быть удалена точка останова, если она является временной.
Этот метод должен быть реализован производными классами.
Производные классы и клиенты могут вызывать следующие методы, чтобы повлиять на пошаговое состояние.
- set_step()¶
Остановитесь после одной строки кода.
- set_next(frame)¶
Остановитесь на следующей строке в данном кадре или под ним.
- set_return(frame)¶
Остановитесь при возврате из заданного кадра.
- set_until(frame, lineno=None)¶
Остановитесь, когда будет достигнута строка с значением lineno, превышающим текущее, или при возврате из текущего кадра.
- set_trace([frame])¶
Начните отладку с фрейма. Если фрейм не указан, отладка начинается с фрейма вызывающего объекта.
- set_continue()¶
Останавливайтесь только в точках останова или по завершении. Если точек останова нет, установите для функции системной трассировки значение
None
.
- set_quit()¶
Установите для атрибута
quitting
значениеTrue
. При следующем вызове одного из методовBdbQuit
возникаетdispatch_*()
.
Производные классы и клиенты могут вызывать следующие методы для управления точками останова. Эти методы возвращают строку, содержащую сообщение об ошибке, если что-то пошло не так, или
None
, если все в порядке.- set_break(filename, lineno, temporary=False, cond=None, funcname=None)¶
Установите новую точку останова. Если строка lineno не существует для filename, переданного в качестве аргумента, верните сообщение об ошибке. filename должно быть в канонической форме, как описано в методе
canonic()
.
- clear_break(filename, lineno)¶
Удалите точки останова в filename и lineno. Если ни одна из них не была задана, верните сообщение об ошибке.
- clear_bpbynumber(arg)¶
Удалите точку останова, которая имеет индекс arg в
Breakpoint.bpbynumber
. Если arg не является числовым или находится вне диапазона, верните сообщение об ошибке.
- clear_all_file_breaks(filename)¶
Удалите все точки останова в filename. Если ни одна из них не была задана, верните сообщение об ошибке.
- clear_all_breaks()¶
Удалите все существующие точки останова. Если ни одна из них не была установлена, верните сообщение об ошибке.
- get_bpbynumber(arg)¶
Возвращает точку останова, заданную заданным числом. Если arg является строкой, она будет преобразована в число. Если arg является нечисловой строкой, если данная точка останова никогда не существовала или была удалена, генерируется
ValueError
.Добавлено в версии 3.2.
- get_break(filename, lineno)¶
Возвращает значение True, если для lineno в filename есть точка останова.
- get_breaks(filename, lineno)¶
Возвращает все точки останова для lineno в filename или пустой список, если ни одна из них не задана.
- get_file_breaks(filename)¶
Возвращает все точки останова в filename или пустой список, если ни одна из них не задана.
- get_all_breaks()¶
Возвращает все установленные точки останова.
Производные классы и клиенты могут вызывать следующие методы для получения структуры данных, представляющей трассировку стека.
- get_stack(f, t)¶
Возвращает список кортежей (frame, lineno) в трассировке стека и размер.
Последний вызванный кадр является последним в списке. Размер - это количество кадров ниже того кадра, в котором был вызван отладчик.
- format_stack_entry(frame_lineno, lprefix=': ')¶
Возвращает строку с информацией о записи в стеке, которая представляет собой кортеж
(frame, lineno)
. Возвращаемая строка содержит:Каноническое имя файла, содержащего фрейм.
Имя функции или
"<lambda>"
.Входные аргументы.
Возвращаемое значение.
Строка кода (если она существует).
Следующие два метода могут быть вызваны клиентами для использования отладчика для отладки statement, заданного в виде строки.
- run(cmd, globals=None, locals=None)¶
Выполните отладку инструкции, выполняемой с помощью функции
exec()
. globals по умолчанию имеет значение__main__.__dict__
, locals по умолчанию имеет значение globals.
- runeval(expr, globals=None, locals=None)¶
Выполните отладку выражения, выполняемого с помощью функции
eval()
. глобальные значения и локальные значения имеют то же значение, что и вrun()
.
- runcall(func, /, *args, **kwds)¶
Отладьте один вызов функции и верните его результат.
Наконец, модуль определяет следующие функции:
- bdb.checkfuncname(b, frame)¶
Верните значение True, если мы должны прервать его здесь, в зависимости от того, как был установлен
Breakpoint
b.Если он был задан с помощью номера строки, он проверяет, совпадает ли
b.line
с номером в frame. Если точка останова была установлена с помощьюfunction name
, мы должны проверить, находимся ли мы в правильном фрейме (правильной функции) и находимся ли мы в ее первой исполняемой строке.
- bdb.effective(file, line, frame)¶
Возвращает
(active breakpoint, delete temporary flag)
или(None, None)
в качестве точки останова для выполнения действия.Активная точка останова является первой записью в
bplist
для параметра (file
,line
) (, который должен существовать), то естьenabled
, для которогоcheckfuncname()
является истинным и не имеет ни ложногоcondition
, ни положительногоignore
значения. Флаг *, означающий, что временная точка останова должна быть удалена, имеет значение False только в том случае, если значениеcond
не может быть вычислено (в этом случае значениеignore
игнорируется).Если такой записи не существует, то возвращается значение (None, Нет).