bdb.md
1> **Источник:** https://python-all.ru/3.0/library/bdb.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `bdb` – Каркас отладчика89Модуль `bdb` отвечает за базовые функции отладчика, такие как установка точек останова или управление выполнением через отладчик.1011Определено следующее исключение:1213#### `[bdb.BdbQuit]exception bdb.BdbQuit`1415Исключение, вызываемое классом1617[`Bdb`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb)1819для выхода из отладчика.2021Модуль `bdb` также определяет два класса:2223#### `[bdb.Breakpoint]class bdb.Breakpoint(self, file, line[, temporary=0[, cond=None[, funcname=None]]])`2425Этот класс реализует временные точки останова, счетчики игнорирования, отключение и (повторное) включение, а также условия.2627Точки останова индексируются по номеру через список `bpbynumber` и по парам `(file, line)` через `bplist`. Первый ссылается на единственный экземпляр класса [`Breakpoint`](https://python-all.ru/3.0/library/bdb.html#bdb.Breakpoint). Второй ссылается на список таких экземпляров, поскольку на одной строке может быть более одной точки останова.2829При создании точки останова связанное с ней имя файла должно быть в канонической форме. Если задано *funcname*, срабатывание точки останова засчитывается при выполнении первой строки этой функции. Условная точка останова всегда засчитывает срабатывание.3031Экземпляры [`Breakpoint`](https://python-all.ru/3.0/library/bdb.html#bdb.Breakpoint) имеют следующие методы:3233#### `[bdb.Breakpoint.deleteMe]deleteMe()`3435Удаляет точку останова из списка, связанного с файлом/строкой. Если это последняя точка останова в этой позиции, также удаляется запись для файла/строки.3637#### `[bdb.Breakpoint.enable]enable()`3839Помечает точку останова как включенную.4041#### `[bdb.Breakpoint.disable]disable()`4243Помечает точку останова как отключенную.4445#### `[bdb.Breakpoint.pprint]pprint([out])`4647Вывести всю информацию о точке останова:4849- Номер точки останова.50- Является ли она временной.51- Её позиция (файл, строка).52- Условие, вызывающее останов.53- Должна ли игнорироваться следующие N раз.54- Счётчик срабатываний точки останова.5556#### `[bdb.Bdb]class bdb.Bdb`5758[`Bdb`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb) выступает в роли универсального базового класса отладчика Python.5960Этот класс берёт на себя детали трассировки; производный класс должен реализовывать взаимодействие с пользователем. Стандартный класс отладчика (`pdb.Pdb`) является примером.6162Следующие методы [`Bdb`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb) обычно не нужно переопределять.6364#### `[bdb.Bdb.canonic]canonic(filename)`6566Вспомогательный метод для получения имени файла в канонической форме, то есть в виде абсолютного пути с нормализованным регистром (на файловых системах без учёта регистра), из которого удалены обрамляющие угловые скобки.6768#### `[bdb.Bdb.reset]reset()`6970Устанавливает атрибуты7172`botframe`7374,7576`stopframe`7778,7980`returnframe`8182и8384`quitting`8586со значениями, готовыми к началу отладки.8788#### `[bdb.Bdb.trace_dispatch]trace_dispatch(frame, event, arg)`8990Эта функция устанавливается как трассирующая функция для отлаживаемых фреймов. Её возвращаемое значение – новая трассирующая функция (в большинстве случаев она же).9192Реализация по умолчанию определяет, как диспетчеризовать фрейм, в зависимости от типа события (передаётся строкой), которое должно быть выполнено. *event* может быть одним из следующих:9394- `"line"`: Будет выполнена новая строка кода.95- `"call"`: Функция будет вызвана, или будет вход в другой блок кода.96- `"return"`: Функция или другой блок кода готовится выполнить возврат.97- `"исключение"`: Произошло исключение.98- `"c_call"`: Будет вызвана C-функция.99- `"c_return"`: C-функция вернулась.100- `"c_exception"`: функция на C вызвала исключение.101102Для событий Python вызываются специализированные функции (см. ниже). Для событий C никаких действий не выполняется.103104Параметр *arg* зависит от предыдущего события.105106Дополнительную информацию о функции трассировки см. в документации к [`sys.settrace()`](https://python-all.ru/3.0/library/sys.html#sys.settrace). Для получения дополнительных сведений об объектах кода и фреймов обращайтесь к [*Стандартной иерархии типов*](https://python-all.ru/3.0/reference/datamodel.html#types).107108#### `[bdb.Bdb.dispatch_line]dispatch_line(frame)`109110Если отладчик должен остановиться на текущей строке, вызывается метод111112[`user_line()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.user_line)113114(который должен быть переопределён в подклассах). Возбуждается исключение115116[`BdbQuit`](https://python-all.ru/3.0/library/bdb.html#bdb.BdbQuit)117118, если установлен флаг119120`Bdb.quitting`121122(который может быть установлен из123124[`user_line()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.user_line)125126). Возвращается ссылка на метод127128[`trace_dispatch()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.trace_dispatch)129130для дальнейшей трассировки в этой области.131132#### `[bdb.Bdb.dispatch_call]dispatch_call(frame, arg)`133134Если отладчик должен остановиться на этом вызове функции, вызывается метод135136[`user_call()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.user_call)137138(который должен быть переопределён в подклассах). Возбуждается исключение139140[`BdbQuit`](https://python-all.ru/3.0/library/bdb.html#bdb.BdbQuit)141142, если установлен флаг143144`Bdb.quitting`145146(который может быть установлен из147148[`user_call()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.user_call)149150). Возвращается ссылка на метод151152[`trace_dispatch()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.trace_dispatch)153154для дальнейшей трассировки в этой области.155156#### `[bdb.Bdb.dispatch_return]dispatch_return(frame, arg)`157158Если отладчик должен остановиться на этом возврате из функции, вызывается метод159160[`user_return()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.user_return)161162(который должен быть переопределён в подклассах). Возбуждается исключение163164[`BdbQuit`](https://python-all.ru/3.0/library/bdb.html#bdb.BdbQuit)165166, если установлен флаг167168`Bdb.quitting`169170(который может быть установлен из171172[`user_return()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.user_return)173174). Возвращается ссылка на метод175176[`trace_dispatch()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.trace_dispatch)177178для дальнейшей трассировки в этой области.179180#### `[bdb.Bdb.dispatch_exception]dispatch_exception(frame, arg)`181182Если отладчик должен остановиться на этом исключении, вызывается метод183184[`user_exception()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.user_exception)185186(который должен быть переопределён в подклассах). Возбуждается исключение187188[`BdbQuit`](https://python-all.ru/3.0/library/bdb.html#bdb.BdbQuit)189190, если установлен флаг191192`Bdb.quitting`193194(который может быть установлен из195196[`user_exception()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.user_exception)197198). Возвращается ссылка на метод199200[`trace_dispatch()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.trace_dispatch)201202для дальнейшей трассировки в этой области.203204Обычно производные классы не переопределяют следующие методы, но могут, если хотят переопределить определение остановки и точек останова.205206#### `[bdb.Bdb.stop_here]stop_here(frame)`207208Этот метод проверяет, находится ли209210*frame*211212где-то ниже213214`botframe`215216в стеке вызовов.217218`botframe`219220– это фрейм, в котором началась отладка.221222#### `[bdb.Bdb.break_here]break_here(frame)`223224Этот метод проверяет, есть ли точка останова в файле и строке, соответствующих225226*frame*227228, или хотя бы в текущей функции. Если точка останова временная, этот метод удаляет её.229230#### `[bdb.Bdb.break_anywhere]break_anywhere(frame)`231232Этот метод проверяет, есть ли точка останова в имени файла текущего кадра.233234Производные классы должны переопределять эти методы, чтобы получить контроль над работой отладчика.235236#### `[bdb.Bdb.user_call]user_call(frame, argument_list)`237238Этот метод вызывается из239240[`dispatch_call()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.dispatch_call)241242, когда есть вероятность, что может потребоваться точка останова где-либо внутри вызываемой функции.243244#### `[bdb.Bdb.user_line]user_line(frame)`245246Этот метод вызывается из247248[`dispatch_line()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.dispatch_line)249250, когда251252[`stop_here()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.stop_here)253254или255256[`break_here()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.break_here)257258возвращает True.259260#### `[bdb.Bdb.user_return]user_return(frame, return_value)`261262Этот метод вызывается из263264[`dispatch_return()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.dispatch_return)265266, когда267268[`stop_here()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.stop_here)269270возвращает True.271272#### `[bdb.Bdb.user_exception]user_exception(frame, exc_info)`273274Этот метод вызывается из275276[`dispatch_exception()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.dispatch_exception)277278, когда279280[`stop_here()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.stop_here)281282возвращает True.283284#### `[bdb.Bdb.do_clear]do_clear(arg)`285286Обрабатывает, как должна быть удалена точка останова, если она временная.287288Этот метод должен быть реализован в производных классах.289290Производные классы и клиенты могут вызывать следующие методы для управления состоянием пошагового выполнения.291292#### `[bdb.Bdb.set_step]set_step()`293294Остановиться после одной строки кода.295296#### `[bdb.Bdb.set_next]set_next(frame)`297298Остановиться на следующей строке внутри или ниже заданного фрейма.299300#### `[bdb.Bdb.set_return]set_return(frame)`301302Остановиться при возврате из заданного фрейма.303304#### `[bdb.Bdb.set_until]set_until(frame)`305306Остановка, когда будет достигнута строка с номером, большим текущего, или при возврате из текущего фрейма.307308#### `[bdb.Bdb.set_trace]set_trace([frame])`309310Начать отладку с311312*frame*313314. Если315316*frame*317318не указан, отладка начинается с фрейма вызывающего кода.319320#### `[bdb.Bdb.set_continue]set_continue()`321322Останавливается только на точках останова или при завершении. Если точек останова нет, системная функция трассировки устанавливается в None.323324#### `[bdb.Bdb.set_quit]set_quit()`325326Устанавливает атрибут327328`quitting`329330в True. При\\nследующем вызове одного из методов331332`dispatch_*()`333334это вызывает335336[`BdbQuit`](https://python-all.ru/3.0/library/bdb.html#bdb.BdbQuit)337338.339340Производные классы и клиенты могут вызывать следующие методы для управления точками останова. Эти методы возвращают строку с сообщением об ошибке, если что-то пошло не так, или `None`, если всё в порядке.341342#### `[bdb.Bdb.set_break]set_break(filename, lineno[, temporary=0[, cond[, funcname]]])`343344Устанавливает новую точку останова. Если строка345346*lineno*347348не существует для349350*filename*351352, переданного в качестве аргумента, возвращает сообщение об ошибке.353354*filename*355356должен быть в канонической форме, как описано в методе357358[`canonic()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.canonic)359360.361362#### `[bdb.Bdb.clear_break]clear_break(filename, lineno)`363364Удаляет точки останова в365366*filename*367368и369370*lineno*371372. Если ни одной не было установлено, возвращается сообщение об ошибке.373374#### `[bdb.Bdb.clear_bpbynumber]clear_bpbynumber(arg)`375376Удаляет точку останова с индексом377378*arg*379380из381382`Breakpoint.bpbynumber`383384. Если385386*arg*387388не является числом или выходит за пределы диапазона, возвращает сообщение об ошибке.389390#### `[bdb.Bdb.clear_all_file_breaks]clear_all_file_breaks(filename)`391392Удаляет все точки останова в393394*filename*395396. Если ни одной не было установлено, возвращается сообщение об ошибке.397398#### `[bdb.Bdb.clear_all_breaks]clear_all_breaks()`399400Удаляет все существующие точки останова.401402#### `[bdb.Bdb.get_break]get_break(filename, lineno)`403404Проверяет, существует ли точка останова для405406*lineno*407408в409410*filename*411412.413414#### `[bdb.Bdb.get_breaks]get_breaks(filename, lineno)`415416Возвращает все точки останова для417418*lineno*419420в421422*filename*423424, или пустой список, если ни одной не установлено.425426#### `[bdb.Bdb.get_file_breaks]get_file_breaks(filename)`427428Возвращает все точки останова в429430*filename*431432, или пустой список, если ни одной не установлено.433434#### `[bdb.Bdb.get_all_breaks]get_all_breaks()`435436Возвращает все установленные точки останова.437438Производные классы и клиенты могут вызывать следующие методы для получения структуры данных, представляющей стек вызовов.439440#### `[bdb.Bdb.get_stack]get_stack(f, t)`441442Возвращает список записей для фрейма, всех вышележащих (вызывающих) и нижележащих фреймов, а также размер вышележащей части.443444#### `[bdb.Bdb.format_stack_entry]format_stack_entry(frame_lineno[, lprefix=': '])`445446Возвращает строку с информацией о записи стека, идентифицируемой кортежем `(frame, lineno)`:447448- Каноническая форма имени файла, содержащего фрейм.449- Имя функции или `"<lambda>"`.450- Входные аргументы.451- Возвращаемое значение.452- Строка кода (если она существует).453454Следующие два метода могут вызываться клиентами для отладки [*оператора*](https://python-all.ru/3.0/glossary.html#term-statement), заданного строкой.455456#### `[bdb.Bdb.run]run(cmd[, globals[, locals]])`457458Отлаживает инструкцию, выполняемую через функцию459460[`exec()`](https://python-all.ru/3.0/library/functions.html#exec)461462.463464*globals*465466по умолчанию равен467468`__main__.__dict__`469470, а471472*locals*473474по умолчанию равен475476*globals*477478.479480#### `[bdb.Bdb.runeval]runeval(expr[, globals[, locals]])`481482Отлаживает выражение, выполняемое через функцию483484[`eval()`](https://python-all.ru/3.0/library/functions.html#eval)485486.487488*globals*489490и491492*locals*493494имеют тот же смысл, что и в495496[`run()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.run)497498.499500#### `[bdb.Bdb.runctx]runctx(cmd, globals, locals)`501502Для обратной совместимости. Вызывает метод503504[`run()`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb.run)505506.507508#### `[bdb.Bdb.runcall]runcall(func, *args, **kwds)`509510Отлаживает одиночный вызов функции и возвращает её результат.511512Наконец, модуль определяет следующие функции:513514#### `[bdb.checkfuncname]bdb.checkfuncname(b, frame)`515516Проверяет, нужно ли останавливаться здесь, в зависимости от того, как была установлена точка останова *b*.517518Если она была установлена по номеру строки, проверяется, совпадает ли `b.line` с номером строки во фрейме, также переданном в качестве аргумента. Если точка останова была установлена по имени функции, необходимо проверить, находимся ли мы в нужном фрейме (в нужной функции) и находимся ли мы на её первой исполняемой строке.519520#### `[bdb.effective]bdb.effective(file, line, frame)`521522Определяет, есть ли действующая (активная) точка останова на этой строке кода. Возвращает номер точки останова или 0, если её нет.523524Вызывается только если известно, что в этом месте есть точка останова. Возвращает сработавшую точку останова и флаг, указывающий, можно ли удалить временную точку останова.525526#### `[bdb.set_trace]bdb.set_trace()`527528Запускает отладку с экземпляром529530[`Bdb`](https://python-all.ru/3.0/library/bdb.html#bdb.Bdb)531532из фрейма вызывающего кода.533