bdb — Фреймворк отладчика
Исходный код: Lib/bdb.py
Модуль bdb обрабатывает базовые функции отладчика, такие как установка точек останова или управление выполнением через отладчик.
Определено следующее исключение:
-
exception bdb.BdbQuit -
Исключение, генерируемое классом
Bdbдля завершения отладчика.
Модуль bdb также определяет два класса:
-
class bdb.Breakpoint(self, file, line, temporary=False, cond=None, funcname=None) -
Этот класс реализует временные точки останова, счётчики игнорирования, отключение и (повторное) включение, а также условия.
Точки останова индексируются по номеру через список, называемый
bpbynumber, и по парам «файл/строка» через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-normalizedиabsolute 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, если установлен флагBdb.quitting(который может быть установлен изuser_line()). Возвращает ссылку на методtrace_dispatch()для дальнейшего отслеживания в данном контексте.
-
dispatch_call(frame, arg) -
Если отладчик должен остановиться на вызове этой функции, вызывается метод
user_call()(который необходимо переопределить в подклассах). Вызывается исключениеBdbQuit, если установлен флагBdb.quitting(который может быть установлен изuser_call()). Возвращает ссылку на методtrace_dispatch()для дальнейшего отслеживания в данном контексте.
-
dispatch_return(frame, arg) -
Если отладчик должен остановиться на возврате из этой функции, вызывается метод
user_return()(который необходимо переопределить в подклассах). Вызывается исключениеBdbQuit, если установлен флагBdb.quitting(который может быть установлен изuser_return()). Возвращает ссылку на методtrace_dispatch()для дальнейшего отслеживания в данном контексте.
-
dispatch_exception(frame, arg) -
Если отладчик должен остановиться на этой ошибке, вызывается метод
user_exception()(который необходимо переопределить в подклассах). Вызывается исключениеBdbQuit, если установлен флагBdb.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(), если точка останова может остановиться внутри вызываемой функции.
-
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) -
Останов, когда достигнута строка с номером строки, большим текущей, или при возврате из текущего фрейма.
-
set_trace([frame]) -
Запуск отладки с фрейма frame. Если 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) -
Возвращает список кортежей (кадр, номер строки) в трассировке стека и размер.
Наиболее недавно вызываемый кадр находится последним в списке. Размер — это количество кадров под кадром, в котором был вызван отладчик.
-
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–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/bdb.html