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-normalizedabsolute 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, если мы должны прервать его здесь, в зависимости от того, как был установлен
Breakpointb.Если он был задан с помощью номера строки, он проверяет, совпадает ли
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, Нет).