bdb — Фреймворк отладчика
Исходный код: Lib/bdb.py
Модуль bdb обрабатывает базовые функции отладчика, такие как установка точек останова или управление выполнением через отладчик.
Определяется следующая исключительная ситуация:
-
exception bdb.BdbQuit -
Исключение, поднятое классом
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() -
Возвращает строку со всей информацией о точке останова, красиво отформатированной:
- Номер точки останова.
- Временный статус (del или keep).
- Позиция файла/строки.
- Условие останова.
- Количество раз для игнорирования.
- Количество раз, когда точка останова была достигнута.
Добавлена в версии 3.2.
-
bpprint(out=None) -
Выводит результат
bpformat()в файл out, или, если онNone, в стандартный вывод.
Экземпляры
Breakpointимеют следующие атрибуты:-
file -
Имя файла
Breakpoint.
-
line -
Номер строки
Breakpointвfile.
-
temporary -
TrueеслиBreakpointв (файл, строка) временный.
-
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: Добавлен параметр skip.
Следующие методы класса
Bdbобычно не требуют переопределения.-
canonic(filename) -
Возвращает каноническую форму filename.
Для реальных имён файлов каноническая форма зависит от операционной системы,
case-normalizedabsolute path. Имя файла с угловыми скобками, например,"<stdin>"сгенерированное в интерактивном режиме, возвращается без изменений.
-
reset() -
Устанавливает
botframe,stopframe,returnframeиquittingатрибуты с значениями, готовыми к началу отладки.
-
trace_dispatch(frame, event, arg) -
Эта функция устанавливается в качестве функции отслеживания отлаживаемых фреймов. Её возвращаемое значение — новая функция отслеживания (в большинстве случаев, это сама функция).
Стандартная реализация определяет способ обработки фрейма в зависимости от типа события (переданного как строка), которое будет выполнено. event может быть одним из следующих:
-
"line": Будет выполнена новая строка кода. -
"call": Функция или другой блок кода собираются вызваться. -
"return": Функция или другой блок кода собираются вернуть значение. -
"exception": Произошла ошибка. -
"c_call": Собирается вызваться функция на C. -
"c_return": Функция на C вернула значение. -
"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если module_name соответствует любому шаблону пропуска.
-
stop_here(frame) -
Возвращает
Trueесли frame находится ниже начального фрейма в стеке.
-
break_here(frame) -
Возвращает
Trueесли для этой строки существует эффективная точка останова.Проверяет, существует ли точка останова для строки или функции и активна ли она. Удаляет временные точки останова на основе информации из
effective().
-
break_anywhere(frame) -
Возвращает
Trueесли для имени файла фрейма frame существует любая точка останова.
Производные классы должны переопределять эти методы, чтобы получить контроль над работой отладчика.
-
user_call(frame, argument_list) -
Вызывается из
dispatch_call(), если точка останова может остановиться внутри вызываемой функции.argument_list больше не используется и всегда будет
None. Аргумент сохраняется для обратной совместимости.
-
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]) -
Начать отладку с кадра. Если кадр не указан, отладка начинается с кадра вызывающей функции.
Изменено в версии 3.13:
set_trace()немедленно войдёт в отладчик, а не на следующей строке кода для выполнения.
-
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) -
Возвращает список кортежей (кадр, номер строки) в стеке вызовов и его размер.
Наиболее недавно вызванный кадр находится в конце списка. Размер — количество кадров ниже кадра, в котором был вызван отладчик.
-
format_stack_entry(frame_lineno, lprefix=': ') -
Возвращает строку с информацией о записи стека, которая является
(frame, lineno)кортежем. Возвращаемая строка содержит:- Каноническое имя файла, содержащего кадр.
- Имя функции или
"<lambda>". - Аргументы.
- Возвращаемое значение.
- Строка кода (если она существует).
Следующие два метода могут быть вызваны клиентами для использования отладчика для отладки выражения, заданного в виде строки.
-
run(cmd, globals=None, locals=None) -
Отладить выражение, выполняемое с помощью функции
exec(). globals по умолчанию__main__.__dict__, locals по умолчанию globals.
-
runeval(expr, globals=None, locals=None) -
Отладить выражение, выполняемое с помощью функции
eval(). globals и locals имеют то же значение, что и вrun().
-
runctx(cmd, globals, locals) -
Для обратной совместимости. Вызывает метод
run().
-
runcall(func, /, *args, **kwds) -
Отладить вызов единственной функции и вернуть её результат.
-
Наконец, модуль определяет следующие функции:
-
bdb.checkfuncname(b, frame) -
Возвращает
True, если следует прерваться здесь, в зависимости от того, как была установлена точка остановаBreakpointb.Если она была установлена по номеру строки, проверяется, совпадает ли
b.lineс той, что в frame. Если точка останова была установлена черезfunction name, необходимо проверить, находимся ли мы в правильном frame (в правильной функции) и на её первой исполняемой строке.
-
bdb.effective(file, line, frame) -
Возвращает
(active breakpoint, delete temporary flag)или(None, None)в качестве точки останова для обработки.Активная точка останова — это первый элемент в
bplistдля (file,line) (которое должно существовать), которыйenabled, для которогоcheckfuncname()истинно и у которого нет ложногоconditionни положительногоignoreсчётчика. Флаг, означающий, что временная точка останова должна быть удалена, равенFalseтолько когдаcondне может быть вычислен (в этом случае счётчикignoreигнорируется).Если такой элемент не существует, то возвращается
(None, None).
-
bdb.set_trace() -
Начать отладку с экземпляром
Bdbиз кадра вызывающей функции.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/bdb.html