Документация Python неофициальный перевод

bdb.md

539 строк · 21.3 КБ · обычная страница · сырой текст · скачать

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