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

pdb.md

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

1> **Источник:** https://python-all.ru/3.12/library/pdb.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`pdb`](https://python-all.ru/3.12/library/pdb.html#module-pdb) – Отладчик Python89**Исходный код:** [Lib/pdb.py](https://python-all.ru/src/3.12/Lib/pdb.py)1011---1213Модуль [`pdb`](https://python-all.ru/3.12/library/pdb.html#module-pdb) определяет интерактивный отладчик исходного кода для программ на Python. Он поддерживает установку (условных) точек останова и пошаговое исполнение на уровне строк исходного кода, просмотр стековых фреймов, отображение исходного кода и выполнение произвольного кода Python в контексте любого фрейма. Также поддерживается посмертная отладка, и его можно вызывать программно.1415Отладчик расширяем – на самом деле он определён как класс [`Pdb`](https://python-all.ru/3.12/library/pdb.html#pdb.Pdb). В настоящее время это не документировано, но легко понять из исходного кода. Интерфейс расширения использует модули [`bdb`](https://python-all.ru/3.12/library/bdb.html#module-bdb) и [`cmd`](https://python-all.ru/3.12/library/cmd.html#module-cmd).1617> **См. также**18>19> **Модуль [`faulthandler`](https://python-all.ru/3.12/library/faulthandler.html#module-faulthandler)**20>21> Используется для явного вывода трассировок Python при сбое, по тайм-ауту или по сигналу пользователя.22>23> **Модуль [`traceback`](https://python-all.ru/3.12/library/traceback.html#module-traceback)**24>25> Стандартный интерфейс для извлечения, форматирования и вывода трассировок стека программ на Python.2627Типичное использование для входа в отладчик – вставить:2829```python30import pdb; pdb.set_trace()31```3233Или:3435```python36breakpoint()37```3839в место, где нужно войти в отладчик, а затем запустить программу. После этого можно пошагово выполнять код, следующий за этой инструкцией, и продолжить выполнение без отладчика с помощью команды [`continue`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-continue).4041Изменено в версии 3.7: Встроенную функцию [`breakpoint()`](https://python-all.ru/3.12/library/functions.html#breakpoint) при вызове по умолчанию можно использовать вместо `import pdb; pdb.set_trace()`.4243```python44def double(x):45   breakpoint()46   return x * 247val = 348print(f"{val} * 2 is {double(val)}")49```5051Приглашение отладчика – `(Pdb)`, что указывает на то, что вы находитесь в режиме отладки:5253```python54> ...(3)double()55-> return x * 256(Pdb) p x57358(Pdb) continue593 * 2 is 660```6162Изменено в версии 3.3: Автодополнение по табуляции через модуль [`readline`](https://python-all.ru/3.12/library/readline.html#module-readline) доступно для команд и их аргументов; например, текущие глобальные и локальные имена предлагаются как аргументы команды `p`.6364Также можно вызвать [`pdb`](https://python-all.ru/3.12/library/pdb.html#module-pdb) из командной строки для отладки других скриптов. Например:6566```python67python -m pdb [-c command] (-m module | pyfile) [args ...]68```6970При запуске как модуля pdb автоматически переходит в режим посмертной отладки, если отлаживаемая программа завершается аварийно. После посмертной отладки (или после нормального завершения программы) pdb перезапускает программу. Автоматический перезапуск сохраняет состояние pdb (например, точки останова) и в большинстве случаев полезнее, чем выход из отладчика при завершении программы.7172#### `-c, --command <command>`7374Выполняет команды, как если бы они были заданы в файле `.pdbrc`; см. [Команды отладчика](https://python-all.ru/3.12/library/pdb.html#debugger-commands).7576Изменено в версии 3.2: Добавлена опция `-c`.7778#### `-m <module>`7980Для выполнения модулей аналогично тому, как это делает `python -m`. Как и в случае со скриптом, отладчик приостановит выполнение прямо перед первой строкой модуля.8182Изменено в версии 3.7: Добавлена опция `-m`.8384Типичное использование для выполнения инструкции под управлением отладчика:8586```python87>>> import pdb88>>> def f(x):89...     print(1 / x)90>>> pdb.run("f(2)")91> <string>(1)<module>()92(Pdb) continue930.594>>>95```9697Типичное использование для анализа аварийно завершившейся программы:9899```python100>>> import pdb101>>> def f(x):102...     print(1 / x)103...104>>> f(0)105Traceback (most recent call last):106  File "<stdin>", line 1, in <module>107  File "<stdin>", line 2, in f108ZeroDivisionError: division by zero109>>> pdb.pm()110> <stdin>(2)f()111(Pdb) p x1120113(Pdb)114```115116Модуль определяет следующие функции; каждая из них запускает отладчик немного по-своему:117118#### `pdb.run(statement, globals=None, locals=None)`119120Выполняет *инструкцию* (заданную как строку или объект кода) под управлением отладчика. Приглашение отладчика появляется до выполнения любого кода; можно установить точки останова и ввести [`continue`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-continue), или пошагово пройти инструкцию с помощью [`step`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-step) или [`next`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-next) (все эти команды описаны ниже). Необязательные аргументы *globals* и *locals* задают окружение, в котором выполняется код; по умолчанию используется словарь модуля [`__main__`](https://python-all.ru/3.12/library/__main__.html#module-__main__). (См. описание встроенных функций [`exec()`](https://python-all.ru/3.12/library/functions.html#exec) или [`eval()`](https://python-all.ru/3.12/library/functions.html#eval).)121122#### `pdb.runeval(expression, globals=None, locals=None)`123124Вычисляет *выражение* (заданное как строка или объект кода) под управлением отладчика. Когда [`runeval()`](https://python-all.ru/3.12/library/pdb.html#pdb.runeval) возвращает результат, он возвращает значение *выражения*. В остальном эта функция аналогична [`run()`](https://python-all.ru/3.12/library/pdb.html#pdb.run).125126#### `pdb.runcall(function, *args, **kwds)`127128Вызывает *функцию* (объект функции или метода, а не строку) с заданными аргументами. Когда [`runcall()`](https://python-all.ru/3.12/library/pdb.html#pdb.runcall) возвращает управление, возвращается результат вызова функции. Приглашение отладчика появляется сразу после входа в функцию.129130#### `pdb.set_trace(*, header=None)`131132Входит в отладчик на фрейме стека вызова. Это полезно для жёсткого задания точки останова в определённом месте программы, даже если код не отлаживается другим способом (например, при сбое утверждения). Если передан *header*, он выводится на консоль непосредственно перед началом отладки.133134Изменено в версии 3.7: Добавлен именованный аргумент *header*.135136#### `pdb.post_mortem(traceback=None)`137138Запускает посмертную отладку для указанного объекта *traceback*. Если объект *traceback* не указан, используется объект traceback текущего обрабатываемого исключения (исключение должно обрабатываться, чтобы значение по умолчанию сработало).139140#### `pdb.pm()`141142Запускает посмертную отладку для traceback, найденного в [`sys.last_traceback`](https://python-all.ru/3.12/library/sys.html#sys.last_traceback).143144Функции `run*` и [`set_trace()`](https://python-all.ru/3.12/library/pdb.html#pdb.set_trace) являются псевдонимами для создания экземпляра класса [`Pdb`](https://python-all.ru/3.12/library/pdb.html#pdb.Pdb) и вызова одноимённого метода. Если требуется доступ к дополнительным возможностям, это нужно сделать самостоятельно:145146#### `class pdb.Pdb(completekey='tab', stdin=None, stdout=None, skip=None, nosigint=False, readrc=True)`147148[`Pdb`](https://python-all.ru/3.12/library/pdb.html#pdb.Pdb) – это класс отладчика.149150Аргументы *completekey*, *stdin* и *stdout* передаются базовому классу [`cmd.Cmd`](https://python-all.ru/3.12/library/cmd.html#cmd.Cmd); см. описание там.151152Аргумент *skip*, если задан, должен быть итерабельным с шаблонами имён модулей в стиле glob. Отладчик не будет входить в фреймы, происходящие из модуля, который соответствует одному из этих шаблонов. [\[1\]](https://python-all.ru/3.12/library/pdb.html#id3)153154По умолчанию Pdb устанавливает обработчик сигнала SIGINT (который посылается при нажатии пользователем `Ctrl`-`C` на консоли) при вводе команды [`continue`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-continue). Это позволяет снова войти в отладчик, нажав `Ctrl`-`C`. Если требуется, чтобы Pdb не изменял обработчик SIGINT, установите *nosigint* в значение true.155156Аргумент *readrc* по умолчанию равен true и определяет, будет ли Pdb загружать файлы .pdbrc из файловой системы.157158Пример вызова для включения трассировки с *skip*:159160```python161import pdb; pdb.Pdb(skip=['django.*']).set_trace()162```163164Возбуждает [событие аудита](https://python-all.ru/3.12/library/sys.html#auditing) `pdb.Pdb` без аргументов.165166Изменено в версии 3.1: Добавлен параметр *skip*.167168Изменено в версии 3.2: Добавлен параметр *nosigint*. Ранее обработчик SIGINT никогда не устанавливался Pdb.169170Изменено в версии 3.6: Добавлен аргумент *readrc*.171172#### `run(statement, globals=None, locals=None)`173174#### `runeval(expression, globals=None, locals=None)`175176#### `runcall(function, *args, **kwds)`177178#### `set_trace()`179180См. документацию по функциям, описанным выше.181182## Команды отладчика183184Команды, распознаваемые отладчиком, перечислены ниже. Большинство команд можно сократить до одной или двух букв, как указано; например, `h(elp)` означает, что для ввода команды help можно использовать `h` или `help` (но не `he` или `hel`, а также не `H` или `Help` или `HELP`). Аргументы команд должны разделяться пробельными символами (пробелами или табуляцией). Необязательные аргументы заключаются в квадратные скобки (`[]`) в синтаксисе команды; сами скобки вводить не нужно. Альтернативы в синтаксисе команды разделяются вертикальной чертой (`|`).185186Ввод пустой строки повторяет последнюю введённую команду. Исключение: если последней командой была [`list`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-list), то будут выведены следующие 11 строк.187188Команды, которые отладчик не распознает, считаются операторами Python и выполняются в контексте отлаживаемой программы. Операторы Python также можно начинать с восклицательного знака (`!`). Это мощный способ исследовать отлаживаемую программу; можно даже изменить переменную или вызвать функцию. Если в таком операторе возникает исключение, выводится его имя, но состояние отладчика не меняется.189190Отладчик поддерживает [псевдонимы](https://python-all.ru/3.12/library/pdb.html#debugger-aliases). Псевдонимы могут иметь параметры, что обеспечивает некоторую гибкость в зависимости от контекста.191192Несколько команд можно вводить в одной строке, разделяя их `;;`. (Одиночный `;` не используется, поскольку именно он является разделителем для нескольких команд в строке, передаваемой синтаксическому анализатору Python.) При разделении команд не применяется никакой интеллектуальный анализ; ввод разбивается по первой паре `;;`, даже если она находится внутри строки в кавычках. Обходной путь для строк с двойными точками с запятой – использовать неявную конкатенацию строк `';'';'` или `";"";"`.193194Чтобы установить временную глобальную переменную, используйте *удобную переменную* (convenience variable). *Удобная переменная* – это переменная, имя которой начинается с `$`. Например, `$foo = 1` устанавливает глобальную переменную `$foo`, которую можно использовать в сеансе отладчика. *Удобные переменные* очищаются при возобновлении выполнения программы, поэтому они с меньшей вероятностью повлияют на вашу программу по сравнению с обычными переменными, такими как `foo = 1`.195196Существует три предустановленных *удобных переменных*:197198- `$_frame`: текущий отлаживаемый фрейм199- `$_retval`: возвращаемое значение, если фрейм завершается возвратом200- `$_exception`: исключение, если фрейм выбрасывает исключение201202Добавлено в версии 3.12: Добавлена возможность *удобных переменных*.203204Если файл `.pdbrc` существует в домашнем каталоге пользователя или в текущем каталоге, он читается в кодировке `'utf-8'` и выполняется так, как если бы он был введён в приглашении отладчика, за исключением того, что пустые строки и строки, начинающиеся с `#`, игнорируются. Это особенно полезно для псевдонимов. Если оба файла существуют, сначала читается файл в домашнем каталоге, и определённые в нём псевдонимы могут быть переопределены локальным файлом.205206Изменено в версии 3.2: `.pdbrc` теперь может содержать команды, продолжающие отладку, например [`continue`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-continue) или [`next`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-next). Ранее эти команды не действовали.207208Изменено в версии 3.11: `.pdbrc` теперь читается в кодировке `'utf-8'`. Ранее он читался в кодировке системной локали.209210#### `h(elp) [command]`211212Без аргументов выводит список доступных команд. С аргументом *команда* выводит справку по этой команде. `help pdb` отображает полную документацию (docstring модуля [`pdb`](https://python-all.ru/3.12/library/pdb.html#module-pdb)). Поскольку аргумент *команда* должен быть идентификатором, для получения справки по команде `!` необходимо ввести `help exec`.213214#### `w(here)`215216Выводит стек вызовов, причём самый новый фрейм находится внизу. Стрелка (`>`) указывает на текущий фрейм, который определяет контекст большинства команд.217218#### `d(own) [count]`219220Переместить текущий кадр на *count* (по умолчанию один) уровней вниз по трассировке стека (к более новому кадру).221222#### `u(p) [count]`223224Переместить текущий кадр на *count* (по умолчанию один) уровней вверх по трассировке стека (к более старому кадру).225226#### `b(reak) [([filename:]lineno | function) [, condition]]`227228С аргументом *lineno* устанавливает точку остановки в текущем файле на указанной строке. С аргументом *function* устанавливает точку остановки на первом исполняемом операторе внутри этой функции. Номер строки может быть предварён именем файла и двоеточием, чтобы указать точку остановки в другом файле (возможно, ещё не загруженном). Файл ищется в [`sys.path`](https://python-all.ru/3.12/library/sys.html#sys.path). Обратите внимание: каждой точке остановки присваивается номер, на который ссылаются все остальные команды управления точками остановки.229230Если присутствует второй аргумент, это выражение, которое должно вычисляться в true (истина), чтобы точка останова сработала.231232Без аргумента выводит список всех точек останова, включая для каждой точки останова количество срабатываний, текущий счётчик игнорирования и связанное условие, если оно есть.233234#### `tbreak [([filename:]lineno | function) [, condition]]`235236Временная точка останова, которая удаляется автоматически при первом срабатывании. Аргументы такие же, как для [`break`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-break).237238#### `cl(ear) [filename:lineno | bpnumber ...]`239240С аргументом *filename:lineno* удаляет все точки останова на этой строке. С разделённым пробелами списком номеров точек останова удаляет указанные точки останова. Без аргумента удаляет все точки останова (но сначала запрашивает подтверждение).241242#### `disable bpnumber [bpnumber ...]`243244Отключает точки останова, заданные разделённым пробелами списком номеров точек останова. Отключение точки останова означает, что она не может приостановить выполнение программы, но в отличие от удаления точки останова, она остаётся в списке точек останова и может быть (повторно) включена.245246#### `enable bpnumber [bpnumber ...]`247248Включает указанные точки останова.249250#### `ignore bpnumber [count]`251252Устанавливает счётчик игнорирования для заданного номера точки останова. Если *count* опущен, счётчик игнорирования устанавливается в 0. Точка останова становится активной, когда счётчик игнорирования равен нулю. Если он не равен нулю, *count* уменьшается каждый раз, когда точка останова достигается, и точка останова не отключена, и любое связанное условие принимает значение true.253254#### `condition bpnumber [condition]`255256Устанавливает новое *condition* для точки останова – выражение, которое должно вычисляться в true, чтобы точка останова сработала. Если *condition* отсутствует, любое существующее условие удаляется; т.е. точка останова становится безусловной.257258#### `commands [bpnumber]`259260Задаёт список команд для точки останова с номером *bpnumber*. Сами команды вводятся на следующих строках. Введите строку, содержащую только `end`, чтобы завершить список команд. Пример:261262```python263(Pdb) commands 1264(com) p some_variable265(com) end266(Pdb)267```268269Чтобы удалить все команды из точки останова, введите `commands` и сразу за ним `end`; то есть не давайте никаких команд.270271Без аргумента *bpnumber* команда `commands` относится к последней установленной точке останова.272273Можно использовать команды точки останова для перезапуска программы. Просто используйте команду [`continue`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-continue), или [`step`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-step), или любую другую команду, которая возобновляет выполнение.274275Указание любой команды, возобновляющей выполнение ([`continue`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-continue), [`step`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-step), [`next`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-next), [`return`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-return), [`jump`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-jump), [`quit`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-quit) и их сокращения), завершает список команд (как если бы за этой командой сразу следовало end). Это происходит потому, что при каждом возобновлении выполнения (даже с помощью простого next или step) может быть встречена другая точка останова, у которой может быть свой список команд, что приводит к неоднозначности: какой список выполнять.276277Если в списке команд используется команда `silent`, обычное сообщение об остановке на точке останова не выводится. Это может быть полезно для точек останова, которые должны вывести определённое сообщение и затем продолжить выполнение. Если ни одна из других команд ничего не выводит, вы не увидите никаких признаков того, что точка останова была достигнута.278279#### `s(tep)`280281Выполняет текущую строку, останавливается при первой возможности (либо в вызываемой функции, либо на следующей строке в текущей функции).282283#### `n(ext)`284285Продолжает выполнение до следующей строки в текущей функции или до её возврата. (Разница между [`next`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-next) и [`step`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-step) в том, что [`step`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-step) останавливается внутри вызванной функции, тогда как [`next`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-next) выполняет вызванные функции (почти) на полной скорости, останавливаясь только на следующей строке в текущей функции.)286287#### `unt(il) [lineno]`288289Без аргумента продолжает выполнение до строки с номером, большим текущего.290291С *lineno* продолжает выполнение до строки с номером, большим или равным *lineno*. В обоих случаях также останавливается при возврате текущего фрейма.292293Изменено в версии 3.2: Добавлена возможность явно указывать номер строки.294295#### `r(eturn)`296297Продолжает выполнение до возврата текущей функции.298299#### `c(ont(inue))`300301Продолжает выполнение, останавливаясь только при встрече точки останова.302303#### `j(ump) lineno`304305Устанавливает следующую строку для выполнения. Доступно только в самом нижнем фрейме. Это позволяет вернуться назад и выполнить код снова, или перейти вперёд, пропустив ненужный код.306307Следует отметить, что не все переходы разрешены – например, нельзя перейти внутрь цикла [`for`](https://python-all.ru/3.12/reference/compound_stmts.html#for) или выйти из конструкции [`finally`](https://python-all.ru/3.12/reference/compound_stmts.html#finally).308309#### `l(ist) [first[, last]]`310311Выводит исходный код текущего файла. Без аргументов выводит 11 строк вокруг текущей строки или продолжает предыдущий вывод. С `.` в качестве аргумента выводит 11 строк вокруг текущей строки. С одним аргументом выводит 11 строк вокруг указанной строки. С двумя аргументами выводит заданный диапазон; если второй аргумент меньше первого, он интерпретируется как количество.312313Текущая строка в текущем фрейме помечается `->`. Если отлаживается исключение, строка, где оно было первоначально вызвано или распространено, помечается `>>`, если она отличается от текущей.314315Изменено в версии 3.2: Добавлен маркер `>>`.316317#### `ll | longlist`318319Выводит весь исходный код текущей функции или фрейма. Интересные строки помечаются так же, как для [`list`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-list).320321Добавлено в версии 3.2.322323#### `a(rgs)`324325Выводит аргументы текущей функции и их текущие значения.326327#### `p expression`328329Вычисляет *expression* в текущем контексте и выводит его значение.330331> **Примечание**332>333> `print()` также можно использовать, но это не команда отладчика – выполняется функция Python [`print()`](https://python-all.ru/3.12/library/functions.html#print).334335#### `pp expression`336337Как команда [`p`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-p), но значение *expression* красиво выводится с помощью модуля [`pprint`](https://python-all.ru/3.12/library/pprint.html#module-pprint).338339#### `whatis expression`340341Выводит тип *expression*.342343#### `source expression`344345Пытается получить исходный код *expression* и отобразить его.346347Добавлено в версии 3.2.348349#### `display [expression]`350351Отображает значение *expression*, если оно изменилось, каждый раз при остановке выполнения в текущем фрейме.352353Без *expression* выводит все выражения для отображения в текущем фрейме.354355> **Примечание**356>357> Display вычисляет *выражение* и сравнивает с результатом предыдущего вычисления *выражения*, поэтому если результат изменяем, display может не замечать изменений.358359Пример:360361```python362lst = []363breakpoint()364pass365lst.append(1)366print(lst)367```368369Display не заметит, что `lst` изменился, потому что результат вычисления изменяется на месте с помощью `lst.append(1)` до сравнения:370371```python372> example.py(3)<module>()373-> pass374(Pdb) display lst375display lst: []376(Pdb) n377> example.py(4)<module>()378-> lst.append(1)379(Pdb) n380> example.py(5)<module>()381-> print(lst)382(Pdb)383```384385Можно применить некоторые трюки с механизмом копирования, чтобы это сработало:386387```python388> example.py(3)<module>()389-> pass390(Pdb) display lst[:]391display lst[:]: []392(Pdb) n393> example.py(4)<module>()394-> lst.append(1)395(Pdb) n396> example.py(5)<module>()397-> print(lst)398display lst[:]: [1]  [old: []]399(Pdb)400```401402Добавлено в версии 3.2.403404#### `undisplay [expression]`405406Больше не показывать *выражение* в текущем фрейме. Без *выражения* очистить все display-выражения для текущего фрейма.407408Добавлено в версии 3.2.409410#### `interact`411412Запускает интерактивный интерпретатор (с использованием модуля [`code`](https://python-all.ru/3.12/library/code.html#module-code)), чьё глобальное пространство имён содержит все (глобальные и локальные) имена, найденные в текущей области видимости.413414Добавлено в версии 3.2.415416#### `alias [name [command]]`417418Создаёт псевдоним с именем *имя*, который выполняет *команду*. Команда *команда* *не* должна быть заключена в кавычки. Заменяемые параметры могут быть обозначены как `%1`, `%2` и так далее, а `%*` заменяется всеми параметрами. Если *команда* опущена, показывается текущий псевдоним для *имени*. Если аргументы не указаны, выводятся все псевдонимы.419420Псевдонимы могут быть вложенными и могут содержать всё, что можно ввести в приглашении pdb. Обратите внимание, что внутренние команды pdb *могут* быть переопределены псевдонимами. Такая команда затем скрывается, пока псевдоним не удалён. Псевдонимы рекурсивно применяются к первому слову командной строки; все остальные слова в строке остаются нетронутыми.421422В качестве примера – два полезных псевдонима (особенно если они помещены в файл `.pdbrc`):423424```python425# Вывести переменные экземпляра (использование "pi classInst")426alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}")427# Вывести переменные экземпляра в self428alias ps pi self429```430431#### `unalias name`432433Удаляет указанный псевдоним *имя*.434435#### `! statement`436437Выполняет (однострочную) *инструкцию* в контексте текущего стекового фрейма. Восклицательный знак можно опустить, если первое слово инструкции не похоже на команду отладчика, например:438439```text440(Pdb) ! n=42441(Pdb)442```443444Чтобы установить глобальную переменную, можно перед командой присваивания поставить инструкцию [`global`](https://python-all.ru/3.12/reference/simple_stmts.html#global) в той же строке, например:445446```text447(Pdb) global list_options; list_options = ['-l']448(Pdb)449```450451#### `run [args ...]`452453#### `restart [args ...]`454455Перезапускает отлаживаемую программу Python. Если указаны *аргументы*, они разделяются с помощью [`shlex`](https://python-all.ru/3.12/library/shlex.html#module-shlex) и результат используется как новое [`sys.argv`](https://python-all.ru/3.12/library/sys.html#sys.argv). История, точки останова, действия и опции отладчика сохраняются. [`restart`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-restart) является псевдонимом для [`run`](https://python-all.ru/3.12/library/pdb.html#pdbcommand-run).456457#### `q(uit)`458459Выход из отладчика. Выполнение программы прерывается.460461#### `debug code`462463Входит в рекурсивный отладчик, который пошагово выполняет *код* (произвольное выражение или инструкцию для выполнения в текущем окружении).464465#### `retval`466467Печатает возвращаемое значение последнего возврата текущей функции.468469Сноски470471\[[1](https://python-all.ru/3.12/library/pdb.html#id1)\]472473Принадлежность фрейма к определённому модулю определяется значением `__name__` в глобальных переменных фрейма.474