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() -
Возвращает строку с аккуратно отформатированной полной информацией о точке останова:
- Номер точки останова.
- Статус временной точки останова (удалить или оставить).
- Позиция в файле и строке.
- Условие останова.
- Число пропусков.
- Число попаданий.
Добавлено в версии 3.2.
-
bpprint(out=None) -
Выводит результат
bpformat()в файл out или, если он равенNone, в стандартный вывод.
Экземпляры
Breakpointимеют следующие атрибуты:-
file -
Имя файла для
Breakpoint.
-
line -
Номер строки для
Breakpointв файлеfile.
-
temporary -
True, если точка остановаBreakpointв позиции (file, line) является временной.
-
cond -
Условие для проверки точки останова
Breakpointв позиции (file, line).
-
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-normalizedабсолютный путьabsolute path. Значение filename с угловыми скобками, например"<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()(который следует переопределить в подклассах). Если установлен флагquitting(его можно установить изuser_line()), возбуждает исключениеBdbQuit. Возвращает ссылку на методtrace_dispatch()для дальнейшей трассировки в этой области видимости.
-
dispatch_call(frame, arg) -
Если отладчик должен остановиться при этом вызове функции, вызывает метод
user_call()(который следует переопределить в подклассах). Если установлен флагquitting(его можно установить изuser_call()), возбуждает исключениеBdbQuit. Возвращает ссылку на методtrace_dispatch()для дальнейшей трассировки в этой области видимости.
-
dispatch_return(frame, arg) -
Если отладчик должен остановиться при возврате из этой функции, вызывает метод
user_return()(который следует переопределить в подклассах). Если установлен флагquitting(его можно установить изuser_return()), возбуждает исключениеBdbQuit. Возвращает ссылку на методtrace_dispatch()для дальнейшей трассировки в этой области видимости.
-
dispatch_exception(frame, arg) -
Если отладчик должен остановиться при этом исключении, вызывает метод
user_exception()(который следует переопределить в подклассах). Если установлен флагquitting(его можно установить изuser_exception()), возбуждает исключениеBdbQuit. Возвращает ссылку на метод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]) -
Начинает отладку с кадра frame. Если frame не указан, отладка начинается с кадра вызывающей стороны.
-
set_continue() -
Останавливается только на точках останова или после завершения. Если точек останова нет, устанавливает системную функцию трассировки в
None.
-
set_quit() -
Устанавливает атрибут
quittingв значениеTrue. При следующем вызове одного из методовdispatch_*()это вызовет исключениеBdbQuit.
Производные классы и клиенты могут вызывать следующие методы для управления точками останова. Эти методы возвращают строку с сообщением об ошибке, если что-то пошло не так, или
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, если в файле filename на строке lineno есть точка останова.
-
get_breaks(filename, lineno) -
Возвращает все точки останова в файле filename на строке lineno или пустой список, если таких точек нет.
-
get_file_breaks(filename) -
Возвращает все точки останова в файле filename или пустой список, если таких точек нет.
-
get_all_breaks() -
Возвращает все установленные точки останова.
Производные классы и клиенты могут вызывать следующие методы для получения структуры данных, представляющей трассировку стека.
-
get_stack(f, t) -
Возвращает список кортежей (frame, lineno) для трассировки стека и размер стека.
Последним в списке находится кадр, вызванный последним. Размер — это число кадров ниже кадра, в котором был вызван отладчик.
-
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.12/library/bdb.html