/
disciplina
/
stepik-python-debugging
Обзор
Документация
Войти
/
disciplina
/
stepik-python-debugging
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
lessons/module1/1.3/lesson2.step
18 строк
9 KB
Sergey
Вторая версия курса
27 янв 2026, 21:14
27 янв 2026, 21:14
79b9655
Код
Авторство
О чём код?
{ "block": { "name": "text", "text": "<h2>Основные понятия в pdb</h2>\n\n<p>Для эффективной работы с pdb необходимо понимать ключевые концепции, на которых построен отладчик.</p>\n\n<h3>1. Breakpoint (Точка останова)</h3>\n\n<p><strong>Breakpoint</strong> — это место в коде, где выполнение программы приостанавливается, и управление передаётся отладчику.</p>\n\n<h4>Типы breakpoint:</h4>\n<ul>\n<li><strong>Обычный breakpoint</strong> — останавливает выполнение каждый раз при достижении</li>\n<li><strong>Условный breakpoint</strong> — останавливает только при выполнении определённого условия</li>\n<li><strong>Временный breakpoint (tbreak)</strong> — автоматически удаляется после первого срабатывания</li>\n</ul>\n\n<p><strong>Примеры:</strong></p>\n<pre><code>(Pdb) break 42 # Остановка на строке 42\n(Pdb) break myfunction # Остановка при входе в функцию\n(Pdb) break 42, x > 10 # Условный breakpoint: только если x > 10\n</code></pre>\n\n<h3>2. Stack Frame (Кадр стека)</h3>\n\n<p><strong>Stack Frame</strong> — это снимок состояния выполнения функции, содержащий локальные переменные, аргументы и информацию о вызове.</p>\n\n<h4>Характеристики:</h4>\n<ul>\n<li>Каждый вызов функции создаёт новый фрейм</li>\n<li>Фреймы организованы в стек (последний вызов — сверху)</li>\n<li>В pdb можно перемещаться между фреймами для анализа состояния</li>\n</ul>\n\n<p><strong>Пример стека вызовов:</strong></p>\n<pre><code>main() ← Нижний фрейм (первый вызов)\n └─> process_data()\n └─> validate_input() ← Верхний фрейм (текущая функция)\n</code></pre>\n\n<h3>3. Debugger Prompt (Командная строка отладчика)</h3>\n\n<p>Когда программа приостановлена, вы видите <strong>prompt отладчика</strong>:</p>\n<pre><code>(Pdb) _\n</code></pre>\n\n<p>Здесь вы можете:</p>\n<ul>\n<li>Вводить команды отладки (<code>step</code>, <code>next</code>, <code>continue</code>)</li>\n<li>Выполнять произвольный Python-код</li>\n<li>Проверять и изменять переменные</li>\n</ul>\n\n<h3>4. Tab Completion (Автодополнение)</h3>\n\n<p>С Python 3.3+ в pdb доступно <strong>автодополнение по Tab</strong>:</p>\n<ul>\n<li>Автодополнение команд pdb</li>\n<li>Автодополнение имён переменных</li>\n<li>Автодополнение атрибутов объектов</li>\n</ul>\n\n<pre><code>(Pdb) pri<TAB> → print\n(Pdb) my_var.<TAB> → показывает атрибуты my_var\n</code></pre>\n\n<h3>5. Convenience Variables (Удобные переменные)</h3>\n\n<p>pdb предоставляет специальные переменные, начинающиеся с <code>$</code>:</p>\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>$_frame</code></td>\n<td>Текущий фрейм, который отлаживается</td>\n<td>Всегда</td>\n</tr>\n<tr>\n<td><code>$_retval</code></td>\n<td>Возвращаемое значение функции</td>\n<td>Только при возврате из функции</td>\n</tr>\n<tr>\n<td><code>$_exception</code></td>\n<td>Объект исключения</td>\n<td>Только при обработке исключения</td>\n</tr>\n<tr>\n<td><code>$_asynctask</code></td>\n<td>Текущая AsyncIO задача</td>\n<td>В асинхронных функциях (Python 3.14+)</td>\n</tr>\n</table>\n\n<p><strong>Пример использования:</strong></p>\n<pre><code>(Pdb) p $_frame # Вывод информации о текущем фрейме\n(Pdb) p $_retval # Проверка возвращаемого значения\n</code></pre>\n\n<h3>6. Configuration Files (Файлы конфигурации)</h3>\n\n<p>pdb может загружать настройки из файлов <code>.pdbrc</code>:</p>\n\n<ul>\n<li><strong>Домашняя директория</strong>: <code>~/.pdbrc</code> — глобальные настройки</li>\n<li><strong>Текущая директория</strong>: <code>./.pdbrc</code> — настройки для проекта</li>\n</ul>\n\n<p>В файле <code>.pdbrc</code> можно:</p>\n<ul>\n<li>Определять алиасы для команд</li>\n<li>Настраивать отладчик</li>\n<li>Добавлять команды, выполняемые при старте</li>\n</ul>\n\n<p><strong>Пример .pdbrc:</strong></p>\n<pre><code># Алиасы для удобства\nalias ll longlist\nalias ps p str(%1)\n\n# Автоматический вывод контекста\nalias ctx p locals()\n</code></pre>\n\n<h3>7. Step vs Next vs Continue</h3>\n\n<p>Три основные команды для управления выполнением:</p>\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>step</code> (s)</td>\n<td>Выполнить текущую строку, войти в вызываемые функции</td>\n<td>Нужно отследить выполнение внутри функций</td>\n</tr>\n<tr>\n<td><code>next</code> (n)</td>\n<td>Выполнить текущую строку, не входя в функции</td>\n<td>Функция работает правильно, не нужно в неё заходить</td>\n</tr>\n<tr>\n<td><code>continue</code> (c)</td>\n<td>Продолжить выполнение до следующего breakpoint</td>\n<td>Нужно дойти до определённой точки</td>\n</tr>\n</table>\n\n<h3>8. Post-mortem Debugging (Отладка после сбоя)</h3>\n\n<p><strong>Post-mortem режим</strong> позволяет запустить отладчик после возникновения необработанного исключения.</p>\n\n<p><strong>Методы запуска:</strong></p>\n<pre><code>import pdb\n\ntry:\n problematic_code()\nexcept Exception:\n pdb.post_mortem() # Отладка в момент исключения\n</code></pre>\n\n<p>Или через командную строку:</p>\n<pre><code>python -m pdb -c continue script.py # При ошибке запустится pdb\n</code></pre>\n\n<h3>9. Контекст выполнения</h3>\n\n<p>При работе в pdb важно понимать текущий контекст:</p>\n\n<ul>\n<li><strong>Локальные переменные</strong> — доступны через <code>locals()</code></li>\n<li><strong>Глобальные переменные</strong> — доступны через <code>globals()</code></li>\n<li><strong>Аргументы функции</strong> — можно просмотреть командой <code>args</code></li>\n</ul>\n\n<pre><code>(Pdb) args # Показать аргументы текущей функции\n(Pdb) p locals() # Все локальные переменные\n(Pdb) whatis variable_name # Тип переменной\n</code></pre>\n\n<h3>Резюме</h3>\n\n<p>Понимание этих базовых концепций позволит эффективно использовать pdb для отладки любых Python-программ. В следующих уроках мы подробно рассмотрим способы запуска pdb и его команды.</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" }