/
disciplina
/
stepik-python-debugging
Обзор
Документация
Войти
/
disciplina
/
stepik-python-debugging
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
lessons/module1/1.3/lesson4.step
18 строк
13 KB
Sergey
Вторая версия курса
27 янв 2026, 21:14
27 янв 2026, 21:14
79b9655
Код
Авторство
О чём код?
{ "block": { "name": "text", "text": "<h2>Таблица команд pdb</h2>\n\n<p>pdb предоставляет богатый набор команд для управления процессом отладки. Изучение этих команд поможет вам эффективно отлаживать любые Python-программы.</p>\n\n<h3>Команды навигации по коду</h3>\n\n<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n<tr>\n<th>Команда</th>\n<th>Краткая форма</th>\n<th>Синтаксис</th>\n<th>Описание</th>\n</tr>\n<tr>\n<td><code>where</code></td>\n<td><code>w</code></td>\n<td><code>where [count]</code></td>\n<td>Вывести стек вызовов; count — количество фреймов для отображения</td>\n</tr>\n<tr>\n<td><code>down</code></td>\n<td><code>d</code></td>\n<td><code>down [count]</code></td>\n<td>Переместиться на count уровней вниз по стеку (к более новым фреймам)</td>\n</tr>\n<tr>\n<td><code>up</code></td>\n<td><code>u</code></td>\n<td><code>up [count]</code></td>\n<td>Переместиться на count уровней вверх по стеку (к более старым фреймам)</td>\n</tr>\n</table>\n\n<h3>Команды управления breakpoint'ами</h3>\n\n<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n<tr>\n<th>Команда</th>\n<th>Краткая форма</th>\n<th>Синтаксис</th>\n<th>Описание</th>\n</tr>\n<tr>\n<td><code>break</code></td>\n<td><code>b</code></td>\n<td><code>break [[file:]lineno | function] [, condition]</code></td>\n<td>Установить breakpoint на строке или в функции с опциональным условием</td>\n</tr>\n<tr>\n<td><code>tbreak</code></td>\n<td></td>\n<td><code>tbreak [[file:]lineno | function] [, condition]</code></td>\n<td>Установить временный breakpoint (удаляется после первого срабатывания)</td>\n</tr>\n<tr>\n<td><code>clear</code></td>\n<td><code>cl</code></td>\n<td><code>clear [filename:lineno | bpnumber ...]</code></td>\n<td>Удалить breakpoint по номеру строки или номеру breakpoint</td>\n</tr>\n<tr>\n<td><code>disable</code></td>\n<td></td>\n<td><code>disable bpnumber [bpnumber ...]</code></td>\n<td>Отключить breakpoint (не удаляя его из списка)</td>\n</tr>\n<tr>\n<td><code>enable</code></td>\n<td></td>\n<td><code>enable bpnumber [bpnumber ...]</code></td>\n<td>Включить ранее отключённый breakpoint</td>\n</tr>\n<tr>\n<td><code>ignore</code></td>\n<td></td>\n<td><code>ignore bpnumber [count]</code></td>\n<td>Игнорировать breakpoint count раз</td>\n</tr>\n<tr>\n<td><code>condition</code></td>\n<td></td>\n<td><code>condition bpnumber [condition]</code></td>\n<td>Установить/удалить условие для breakpoint</td>\n</tr>\n<tr>\n<td><code>commands</code></td>\n<td></td>\n<td><code>commands [bpnumber]</code></td>\n<td>Задать команды для автоматического выполнения при срабатывании breakpoint</td>\n</tr>\n</table>\n\n<h3>Команды выполнения кода</h3>\n\n<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n<tr>\n<th>Команда</th>\n<th>Краткая форма</th>\n<th>Синтаксис</th>\n<th>Описание</th>\n</tr>\n<tr>\n<td><code>step</code></td>\n<td><code>s</code></td>\n<td><code>step</code></td>\n<td>Выполнить текущую строку; войти внутрь вызываемых функций</td>\n</tr>\n<tr>\n<td><code>next</code></td>\n<td><code>n</code></td>\n<td><code>next</code></td>\n<td>Выполнить текущую строку; НЕ входить в вызываемые функции</td>\n</tr>\n<tr>\n<td><code>until</code></td>\n<td><code>unt</code></td>\n<td><code>until [lineno]</code></td>\n<td>Продолжить до строки с большим номером или до возврата из функции</td>\n</tr>\n<tr>\n<td><code>return</code></td>\n<td><code>r</code></td>\n<td><code>return</code></td>\n<td>Продолжить выполнение до возврата из текущей функции</td>\n</tr>\n<tr>\n<td><code>continue</code></td>\n<td><code>c</code></td>\n<td><code>continue</code></td>\n<td>Продолжить выполнение до следующего breakpoint</td>\n</tr>\n<tr>\n<td><code>jump</code></td>\n<td><code>j</code></td>\n<td><code>jump lineno</code></td>\n<td>Установить следующую выполняемую строку (только в нижнем фрейме)</td>\n</tr>\n<tr>\n<td><code>run</code></td>\n<td></td>\n<td><code>run [args ...]</code></td>\n<td>Перезапустить отлаживаемую программу с новыми аргументами</td>\n</tr>\n<tr>\n<td><code>restart</code></td>\n<td></td>\n<td><code>restart [args ...]</code></td>\n<td>Псевдоним для команды run</td>\n</tr>\n</table>\n\n<h3>Команды просмотра кода и данных</h3>\n\n<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n<tr>\n<th>Команда</th>\n<th>Краткая форма</th>\n<th>Синтаксис</th>\n<th>Описание</th>\n</tr>\n<tr>\n<td><code>list</code></td>\n<td><code>l</code></td>\n<td><code>list [first[, last]]</code></td>\n<td>Показать исходный код (11 строк по умолчанию)</td>\n</tr>\n<tr>\n<td><code>longlist</code></td>\n<td><code>ll</code></td>\n<td><code>ll</code></td>\n<td>Показать весь исходный код текущей функции</td>\n</tr>\n<tr>\n<td><code>args</code></td>\n<td><code>a</code></td>\n<td><code>args</code></td>\n<td>Вывести аргументы текущей функции</td>\n</tr>\n<tr>\n<td><code>p</code></td>\n<td></td>\n<td><code>p expression</code></td>\n<td>Вычислить и вывести значение выражения</td>\n</tr>\n<tr>\n<td><code>pp</code></td>\n<td></td>\n<td><code>pp expression</code></td>\n<td>Красиво вывести значение выражения (pretty-print)</td>\n</tr>\n<tr>\n<td><code>whatis</code></td>\n<td></td>\n<td><code>whatis expression</code></td>\n<td>Вывести тип выражения</td>\n</tr>\n<tr>\n<td><code>source</code></td>\n<td></td>\n<td><code>source expression</code></td>\n<td>Показать исходный код для объекта</td>\n</tr>\n<tr>\n<td><code>display</code></td>\n<td></td>\n<td><code>display [expression]</code></td>\n<td>Автоматически выводить значение выражения при каждой остановке</td>\n</tr>\n<tr>\n<td><code>undisplay</code></td>\n<td></td>\n<td><code>undisplay [expression]</code></td>\n<td>Отменить автоматический вывод выражения</td>\n</tr>\n</table>\n\n<h3>Команды отладки и анализа</h3>\n\n<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n<tr>\n<th>Команда</th>\n<th>Краткая форма</th>\n<th>Синтаксис</th>\n<th>Описание</th>\n</tr>\n<tr>\n<td><code>help</code></td>\n<td><code>h</code></td>\n<td><code>help [command]</code></td>\n<td>Показать справку по командам или конкретной команде</td>\n</tr>\n<tr>\n<td><code>interact</code></td>\n<td></td>\n<td><code>interact</code></td>\n<td>Запустить интерактивный интерпретатор в текущей области видимости</td>\n</tr>\n<tr>\n<td><code>debug</code></td>\n<td></td>\n<td><code>debug code</code></td>\n<td>Войти в рекурсивный отладчик для выполнения кода</td>\n</tr>\n<tr>\n<td><code>retval</code></td>\n<td></td>\n<td><code>retval</code></td>\n<td>Вывести возвращаемое значение текущей функции</td>\n</tr>\n<tr>\n<td><code>exceptions</code></td>\n<td></td>\n<td><code>exceptions [excnumber]</code></td>\n<td>Список или навигация по цепочке исключений</td>\n</tr>\n</table>\n\n<h3>Команды для алиасов и выполнения</h3>\n\n<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n<tr>\n<th>Команда</th>\n<th>Синтаксис</th>\n<th>Описание</th>\n</tr>\n<tr>\n<td><code>alias</code></td>\n<td><code>alias [name [command]]</code></td>\n<td>Создать алиас для команды (%1-%9 для параметров)</td>\n</tr>\n<tr>\n<td><code>unalias</code></td>\n<td><code>unalias name</code></td>\n<td>Удалить алиас</td>\n</tr>\n<tr>\n<td><code>!</code></td>\n<td><code>! statement</code></td>\n<td>Выполнить Python-выражение в текущем контексте</td>\n</tr>\n</table>\n\n<h3>Команды завершения</h3>\n\n<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n<tr>\n<th>Команда</th>\n<th>Краткая форма</th>\n<th>Синтаксис</th>\n<th>Описание</th>\n</tr>\n<tr>\n<td><code>quit</code></td>\n<td><code>q</code></td>\n<td><code>quit</code></td>\n<td>Выйти из отладчика и прервать программу</td>\n</tr>\n</table>\n\n<h3>Специальные возможности</h3>\n\n<h4>1. Пустая строка</h4>\n<p>Нажатие Enter без ввода команды повторяет последнюю команду. Для <code>list</code> показывает следующие 11 строк.</p>\n\n<h4>2. Множественные команды</h4>\n<p>Разделяйте команды с помощью <code>;;</code>:</p>\n<pre><code>(Pdb) n;; p x;; c # Выполнить next, вывести x, продолжить\n</code></pre>\n\n<h4>3. Python-выражения</h4>\n<p>Нераспознанные команды или команды с префиксом <code>!</code> выполняются как Python-код:</p>\n<pre><code>(Pdb) x = 42 # Установить переменную\n(Pdb) print(f\"x = {x}\") # Выполнить Python-код\n(Pdb) ! import math; print(math.pi) # Явное выполнение\n</code></pre>\n\n<h3>Примеры использования</h3>\n\n<h4>Пример 1: Базовая отладка</h4>\n<pre><code>(Pdb) l # Показать код\n(Pdb) n # Выполнить следующую строку\n(Pdb) p variable # Проверить значение переменной\n(Pdb) c # Продолжить выполнение\n</code></pre>\n\n<h4>Пример 2: Условный breakpoint</h4>\n<pre><code>(Pdb) b 25, x > 100 # Остановиться на строке 25, только если x > 100\n(Pdb) c\n</code></pre>\n\n<h4>Пример 3: Навигация по стеку</h4>\n<pre><code>(Pdb) w # Показать стек вызовов\n(Pdb) u # Подняться на уровень вверх\n(Pdb) p local_var # Проверить переменную в верхнем фрейме\n(Pdb) d # Вернуться вниз\n</code></pre>\n\n<h4>Пример 4: Команды для breakpoint</h4>\n<pre><code>(Pdb) b 30\nBreakpoint 1 at script.py:30\n(Pdb) commands 1\n(com) p x\n(com) p y\n(com) c\n(com) end\n(Pdb) c # При срабатывании BP 1 автоматически выведутся x и y\n</code></pre>\n\n<h4>Пример 5: Использование алиасов</h4>\n<pre><code>(Pdb) alias ps p str(%1) # Создать алиас для вывода строкового представления\n(Pdb) ps my_object # Использовать алиас\n</code></pre>\n\n<h3>Лучшие практики</h3>\n\n<ul>\n<li>✅ Используйте краткие формы команд для быстроты (<code>n</code>, <code>s</code>, <code>c</code>)</li>\n<li>✅ Создавайте алиасы для часто используемых команд в <code>.pdbrc</code></li>\n<li>✅ Используйте <code>pp</code> вместо <code>p</code> для сложных структур данных</li>\n<li>✅ Используйте <code>ll</code> для быстрого просмотра всей функции</li>\n<li>✅ Пользуйтесь Tab-автодополнением для имён переменных и команд</li>\n<li>✅ Используйте <code>display</code> для отслеживания изменения переменных</li>\n</ul>\n\n<p>Теперь вы знаете все основные команды pdb и готовы эффективно отлаживать Python-программы!</p>", "video": null, "options": {}, "subtitle_files": [], "is_deprecated": false, "source": {}, "subtitles": {}, "tests_archive": null, "feedback_correct": "", "feedback_wrong": "" }, "id": null, "has_review": false, "time": "2026-01-27T00:00:00.000Z" }