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в позиции (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 не указан, отладка начинается с кадра вызывающего кода.
Изменено в версии 3.13:
set_trace()немедленно запускает отладчик, а не ждёт следующей выполняемой строки кода.
-
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()возвращает true, а условиеconditionне ложно и счётчикignoreне положителен. Флаг, указывающий на необходимость удалить временную точку останова, принимает значениеFalseтолько в том случае, если условиеcondневозможно вычислить (в этом случае счётчикignoreигнорируется).Если такой записи нет, возвращается
(None, None).
-
bdb.set_trace() -
Начинает отладку с помощью экземпляра
Bdb, начиная с кадра вызывающего кода.
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/bdb.html