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

bdb.md

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

1> **Источник:** https://python-all.ru/3.11/library/bdb.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`bdb`](https://python-all.ru/3.11/library/bdb.html#module-bdb) – фреймворк отладчика89**Исходный код:** [Lib/bdb.py](https://python-all.ru/src/3.11/Lib/bdb.py)1011---1213Модуль [`bdb`](https://python-all.ru/3.11/library/bdb.html#module-bdb) реализует базовые функции отладчика, такие как установка точек останова или управление выполнением через отладчик.1415Определено следующее исключение:1617#### `exception bdb.BdbQuit`1819Исключение, вызываемое классом [`Bdb`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb) для выхода из отладчика.2021Модуль [`bdb`](https://python-all.ru/3.11/library/bdb.html#module-bdb) также определяет два класса:2223#### `class bdb.Breakpoint(self, file, line, temporary=False, cond=None, funcname=None)`2425Этот класс реализует временные точки останова, счетчики игнорирования, отключение и (повторное) включение, а также условия.2627Точки останова индексируются по номеру через список с именем [`bpbynumber`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.bpbynumber) и по парам `(file, line)` через [`bplist`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.bplist). Первый указывает на один экземпляр класса [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint). Второй указывает на список таких экземпляров, так как на одной строке может быть несколько точек останова.2829При создании точки останова связанное с ней [`file name`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.file) должно быть в канонической форме. Если задан [`funcname`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.funcname), то точка останова [`hit`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.hits) будет учтена при выполнении первой строки этой функции. Точка останова [`conditional`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.cond) всегда учитывает [`hit`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.hits).3031Экземпляры [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint) имеют следующие методы:3233#### `deleteMe()`3435Удаляет точку останова из списка, связанного с файлом/строкой. Если это последняя точка останова в этой позиции, также удаляется запись для файла/строки.3637#### `enable()`3839Помечает точку останова как включенную.4041#### `disable()`4243Помечает точку останова как отключенную.4445#### `bpformat()`4647Возвращает строку со всей информацией о точке останова, аккуратно отформатированную:4849- Номер точки останова.50- Временный статус (del или keep).51- Позиция файла/строки.52- Условие останова.53- Количество пропусков.54- Количество срабатываний.5556Новое в версии 3.2.5758#### `bpprint(out=None)`5960Выводит результат [`bpformat()`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.bpformat) в файл *out* или, если он равен `None`, на стандартный вывод.6162Экземпляры [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint) имеют следующие атрибуты:6364#### `file`6566Имя файла [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint).6768#### `line`6970Номер строки [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint) в [`file`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.file).7172#### `temporary`7374True, если [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint) в (file, line) временная.7576#### `cond`7778Условие для вычисления [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint) в (файл, строка).7980#### `funcname`8182Имя функции, определяющее, срабатывает ли [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint) при входе в функцию.8384#### `enabled`8586True, если [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint) включена.8788#### `bpbynumber`8990Числовой индекс для одного экземпляра [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint).9192#### `bplist`9394Словарь экземпляров [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint), проиндексированных кортежами ([`file`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.file), [`line`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.line)).9596#### `ignore`9798Количество раз, которое нужно игнорировать [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint).99100#### `hits`101102Счётчик количества срабатываний [`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint).103104#### `class bdb.Bdb(skip=None)`105106Класс [`Bdb`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb) является базовым классом универсального отладчика Python.107108Этот класс берёт на себя детали механизма трассировки; производный класс должен реализовывать взаимодействие с пользователем. Стандартный класс отладчика ([`pdb.Pdb`](https://python-all.ru/3.11/library/pdb.html#pdb.Pdb)) является примером.109110Аргумент *skip*, если указан, должен быть итерируемым объектом с шаблонами имён модулей в стиле glob. Отладчик не будет входить во фреймы, которые происходят из модуля, соответствующего одному из этих шаблонов. Определение того, считается ли фрейм происходящим из определённого модуля, выполняется с помощью `__name__` в глобальных переменных фрейма.111112Изменено в версии 3.1: Добавлен параметр *skip*.113114Следующие методы [`Bdb`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb) обычно не требуют переопределения.115116#### `canonic(filename)`117118Возвращает каноническую форму *filename*.119120Для реальных имён файлов каноническая форма зависит от операционной системы, [`case-normalized`](https://python-all.ru/3.11/library/os.path.html#os.path.normcase) [`absolute path`](https://python-all.ru/3.11/library/os.path.html#os.path.abspath). *filename* с угловыми скобками, например `"<stdin>"`, сгенерированное в интерактивном режиме, возвращается без изменений.121122#### `reset()`123124Устанавливает атрибуты `botframe`, `stopframe`, `returnframe` и [`quitting`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.set_quit) со значениями, готовыми к началу отладки.125126#### `trace_dispatch(frame, event, arg)`127128Эта функция устанавливается как трассирующая функция для отлаживаемых фреймов. Её возвращаемое значение – новая трассирующая функция (в большинстве случаев она же).129130Реализация по умолчанию определяет, как диспетчеризовать фрейм, в зависимости от типа события (передаётся строкой), которое должно быть выполнено. *event* может быть одним из следующих:131132- `"line"`: Будет выполнена новая строка кода.133- `"call"`: Функция или другой блок кода будет вызван.134- `"return"`: Функция или другой блок кода собирается вернуть значение.135- `"exception"`: Произошло исключение.136- `"c_call"`: C-функция будет вызвана.137- `"c_return"`: C-функция вернулась.138- `"c_exception"`: C-функция вызвала исключение.139140Для событий Python вызываются специализированные функции (см. ниже). Для событий C никаких действий не выполняется.141142Параметр *arg* зависит от предыдущего события.143144См. документацию к [`sys.settrace()`](https://python-all.ru/3.11/library/sys.html#sys.settrace) для получения дополнительной информации о трассирующей функции. За дополнительными сведениями об объектах кода и фреймов обратитесь к [Стандартной иерархии типов](https://python-all.ru/3.11/reference/datamodel.html#types).145146#### `dispatch_line(frame)`147148Если отладчик должен остановиться на текущей строке, вызвать метод [`user_line()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.user_line) (который следует переопределять в подклассах). Возбудить исключение [`BdbQuit`](https://python-all.ru/3.11/library/bdb.html#bdb.BdbQuit), если установлен флаг [`quitting`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.set_quit) (который можно установить из [`user_line()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.user_line)). Возвратить ссылку на метод [`trace_dispatch()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.trace_dispatch) для дальнейшей трассировки в этой области видимости.149150#### `dispatch_call(frame, arg)`151152Если отладчик должен остановиться на этом вызове функции, вызвать метод [`user_call()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.user_call) (который следует переопределять в подклассах). Возбудить исключение [`BdbQuit`](https://python-all.ru/3.11/library/bdb.html#bdb.BdbQuit), если установлен флаг [`quitting`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.set_quit) (который можно установить из [`user_call()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.user_call)). Возвратить ссылку на метод [`trace_dispatch()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.trace_dispatch) для дальнейшей трассировки в этой области видимости.153154#### `dispatch_return(frame, arg)`155156Если отладчик должен остановиться на этом возврате из функции, вызвать метод [`user_return()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.user_return) (который следует переопределять в подклассах). Возбудить исключение [`BdbQuit`](https://python-all.ru/3.11/library/bdb.html#bdb.BdbQuit), если установлен флаг [`quitting`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.set_quit) (который можно установить из [`user_return()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.user_return)). Возвратить ссылку на метод [`trace_dispatch()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.trace_dispatch) для дальнейшей трассировки в этой области видимости.157158#### `dispatch_exception(frame, arg)`159160Если отладчик должен остановиться на этом исключении, вызывается метод [`user_exception()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.user_exception) (который следует переопределять в подклассах). Возбудить исключение [`BdbQuit`](https://python-all.ru/3.11/library/bdb.html#bdb.BdbQuit), если установлен флаг [`quitting`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.set_quit) (который можно установить из [`user_exception()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.user_exception)). Возвратить ссылку на метод [`trace_dispatch()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.trace_dispatch) для дальнейшей трассировки в этой области видимости.161162Обычно производные классы не переопределяют следующие методы, но могут, если хотят переопределить определение остановки и точек останова.163164#### `is_skipped_line(module_name)`165166Возвращает True, если *module\_name* соответствует любому шаблону пропуска.167168#### `stop_here(frame)`169170Возвращает True, если *frame* находится ниже начального фрейма в стеке.171172#### `break_here(frame)`173174Возвращает True, если для этой строки есть активная точка остановки.175176Проверяет, существует ли точка останова на строку или функцию и активна ли она. Удаляет временные точки останова на основе информации из [`effective()`](https://python-all.ru/3.11/library/bdb.html#bdb.effective).177178#### `break_anywhere(frame)`179180Возвращает True, если для имени файла *frame* существует хотя бы одна точка остановки.181182Производные классы должны переопределять эти методы, чтобы получить контроль над работой отладчика.183184#### `user_call(frame, argument_list)`185186Вызывается из [`dispatch_call()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.dispatch_call), если точка останова может сработать внутри вызываемой функции.187188#### `user_line(frame)`189190Вызывается из [`dispatch_line()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.dispatch_line), когда [`stop_here()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.stop_here) или [`break_here()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.break_here) возвращает `True`.191192#### `user_return(frame, return_value)`193194Вызывается из [`dispatch_return()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.dispatch_return), когда [`stop_here()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.stop_here) возвращает `True`.195196#### `user_exception(frame, exc_info)`197198Вызывается из [`dispatch_exception()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.dispatch_exception), когда [`stop_here()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.stop_here) возвращает `True`.199200#### `do_clear(arg)`201202Обрабатывает, как должна быть удалена точка останова, если она временная.203204Этот метод должен быть реализован в производных классах.205206Производные классы и клиенты могут вызывать следующие методы для управления состоянием пошагового выполнения.207208#### `set_step()`209210Остановиться после одной строки кода.211212#### `set_next(frame)`213214Остановиться на следующей строке внутри или ниже заданного фрейма.215216#### `set_return(frame)`217218Остановиться при возврате из заданного фрейма.219220#### `set_until(frame, lineno=None)`221222Остановиться, когда будет достигнута строка с *lineno* больше текущей, или при возврате из текущего фрейма.223224#### `set_trace([frame])`225226Начать отладку с *frame*. Если *frame* не указан, отладка начинается с фрейма вызывающего кода.227228#### `set_continue()`229230Останавливаться только в точках останова или при завершении. Если точек останова нет, устанавливает системную трассировочную функцию в `None`.231232#### `set_quit()`233234Устанавливает атрибут `quitting` в `True`. Это вызывает [`BdbQuit`](https://python-all.ru/3.11/library/bdb.html#bdb.BdbQuit) при следующем вызове одного из методов `dispatch_*()`.235236Производные классы и клиенты могут вызывать следующие методы для управления точками останова. Эти методы возвращают строку с сообщением об ошибке, если что-то пошло не так, или `None`, если всё в порядке.237238#### `set_break(filename, lineno, temporary=False, cond=None, funcname=None)`239240Установить новую точку останова. Если строки с *lineno* не существует для *filename*, переданного в качестве аргумента, возвращается сообщение об ошибке. *filename* должен быть в канонической форме, как описано в методе [`canonic()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.canonic).241242#### `clear_break(filename, lineno)`243244Удаляет точки останова в *filename* и *lineno*. Если ни одна не установлена, возвращает сообщение об ошибке.245246#### `clear_bpbynumber(arg)`247248Удаляет точку останова с индексом *arg* из [`Breakpoint.bpbynumber`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.bpbynumber). Если *arg* не является числом или выходит за пределы, возвращает сообщение об ошибке.249250#### `clear_all_file_breaks(filename)`251252Удаляет все точки останова в *filename*. Если ни одной не установлено, возвращает сообщение об ошибке.253254#### `clear_all_breaks()`255256Удаляет все существующие точки останова. Если ни одной не установлено, возвращает сообщение об ошибке.257258#### `get_bpbynumber(arg)`259260Возвращает точку останова, заданную указанным номером. Если *arg* – строка, она преобразуется в число. Если *arg* – нечисловая строка, если указанная точка останова никогда не существовала или была удалена, возбуждается [`ValueError`](https://python-all.ru/3.11/library/exceptions.html#ValueError).261262Новое в версии 3.2.263264#### `get_break(filename, lineno)`265266Возвращает True, если есть точка останова для *lineno* в *filename*.267268#### `get_breaks(filename, lineno)`269270Возвращает все точки останова для *lineno* в *filename*, или пустой список, если ни одной не установлено.271272#### `get_file_breaks(filename)`273274Возвращает все точки останова в *filename*, или пустой список, если ни одной не установлено.275276#### `get_all_breaks()`277278Возвращает все установленные точки останова.279280Производные классы и клиенты могут вызывать следующие методы для получения структуры данных, представляющей стек вызовов.281282#### `get_stack(f, t)`283284Возвращает список кортежей (frame, lineno) в стеке вызовов, а также размер.285286Самый последний вызванный фрейм находится в конце списка. Размер – это количество фреймов ниже фрейма, в котором был вызван отладчик.287288#### `format_stack_entry(frame_lineno, lprefix=': ')`289290Возвращает строку с информацией о записи стека, которая является кортежем `(frame, lineno)`. Возвращаемая строка содержит:291292- Каноническое имя файла, содержащего фрейм.293- Имя функции или `"<lambda>"`.294- Входные аргументы.295- Возвращаемое значение.296- Строка кода (если она существует).297298Следующие два метода могут вызываться клиентами для отладки [оператора](https://python-all.ru/3.11/glossary.html#term-statement), заданного строкой.299300#### `run(cmd, globals=None, locals=None)`301302Отлаживает оператор, выполняемый через функцию [`exec()`](https://python-all.ru/3.11/library/functions.html#exec). *globals* по умолчанию равно `__main__.__dict__`, *locals* по умолчанию равно *globals*.303304#### `runeval(expr, globals=None, locals=None)`305306Отлаживает выражение, выполняемое через функцию [`eval()`](https://python-all.ru/3.11/library/functions.html#eval). *globals* и *locals* имеют тот же смысл, что и в [`run()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.run).307308#### `runctx(cmd, globals, locals)`309310Для обратной совместимости. Вызывает метод [`run()`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb.run).311312#### `runcall(func, /, *args, **kwds)`313314Отлаживает одиночный вызов функции и возвращает её результат.315316Наконец, модуль определяет следующие функции:317318#### `bdb.checkfuncname(b, frame)`319320Возвращает True, если нужно остановиться здесь, в зависимости от того, как была установлена\\n[`Breakpoint`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint) *b*.321322Если она была установлена по номеру строки, проверяется, совпадает ли [`b.line`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.line) с номером в *фрейме*. Если точка останова была установлена через [`function name`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.funcname), необходимо проверить, находимся ли мы в правильном *фрейме* (правильной функции) и находимся ли на первой исполняемой строке.323324#### `bdb.effective(file, line, frame)`325326Возвращает `(active breakpoint, delete temporary flag)` или `(None, None)` как точку останова, с которой нужно работать.327328The *active breakpoint* is the first entry in [`bplist`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.bplist) for the ([`file`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.file), [`line`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.line)) (which must exist) that is [`enabled`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.enabled), for which [`checkfuncname()`](https://python-all.ru/3.11/library/bdb.html#bdb.checkfuncname) is True, and that has neither a False [`condition`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.cond) nor positive [`ignore`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.ignore) count. The *flag*, meaning that a temporary breakpoint should be deleted, is False only when the [`cond`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.cond) cannot be evaluated (in which case, [`ignore`](https://python-all.ru/3.11/library/bdb.html#bdb.Breakpoint.ignore) count is ignored).329330Если такой записи не существует, возвращается (None, None).331332#### `bdb.set_trace()`333334Начинает отладку с экземпляром [`Bdb`](https://python-all.ru/3.11/library/bdb.html#bdb.Bdb) из фрейма вызывающего кода.335