/
disciplina
/
stepik-python-debugging
Обзор
Документация
Войти
/
disciplina
/
stepik-python-debugging
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
lessons/module1/1.4/lesson5.step
18 строк
9 KB
Sergey
Вторая версия курса
27 янв 2026, 21:14
27 янв 2026, 21:14
79b9655
Код
Авторство
О чём код?
{ "block": { "name": "text", "text": "<h2>pdb++ (pdbpp) — Enhanced Python Debugger</h2>\n\n<h3>Описание</h3>\n<p><strong>pdb++</strong> — это drop-in replacement для стандартного pdb с расширенными возможностями и улучшенным интерфейсом. После установки автоматически заменяет стандартный pdb.</p>\n\n<h3>Установка</h3>\n<pre><code>pip install pdbpp</code></pre>\n\n<p>После установки все импорты <code>import pdb</code> автоматически будут использовать pdb++.</p>\n\n<h3>Основные возможности</h3>\n\n<ul>\n<li>✅ <strong>Подсветка синтаксиса</strong> — цветной вывод кода</li>\n<li>✅ <strong>Sticky mode</strong> — код остаётся на экране при пошаговом выполнении</li>\n<li>✅ <strong>Smart command parsing</strong> — умное распознавание команд vs Python-кода</li>\n<li>✅ <strong>Longlist улучшения</strong> — показ всей функции с подсветкой</li>\n<li>✅ <strong>Autocompletion</strong> — улучшенное автодополнение</li>\n<li>✅ <strong>Показ значений</strong> — inline отображение значений переменных</li>\n<li>✅ <strong>Полная совместимость с pdb</strong></li>\n</ul>\n\n<h3>Способы запуска</h3>\n\n<pre><code># После установки pdbpp просто используйте pdb\nimport pdb\npdb.set_trace() # Автоматически использует pdb++\n\n# Или с breakpoint()\nbreakpoint() # Также использует pdb++\n</code></pre>\n\n<h3>Базовые команды</h3>\n\n<p>Все команды pdb плюс дополнительные:</p>\n\n<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n<tr>\n<th>Команда</th>\n<th>Описание</th>\n</tr>\n<tr>\n<td><code>sticky</code></td>\n<td>Включить/выключить sticky mode</td>\n</tr>\n<tr>\n<td><code>longlist</code> / <code>ll</code></td>\n<td>Показать всю функцию с подсветкой</td>\n</tr>\n<tr>\n<td><code>interact</code></td>\n<td>Запустить интерактивную консоль</td>\n</tr>\n<tr>\n<td><code>display</code></td>\n<td>Автоматически показывать выражение</td>\n</tr>\n<tr>\n<td><code>undisplay</code></td>\n<td>Отменить display</td>\n</tr>\n<tr>\n<td><code>source</code></td>\n<td>Показать исходный код объекта</td>\n</tr>\n<tr>\n<td><code>edit</code></td>\n<td>Открыть редактор</td>\n</tr>\n</table>\n\n<h3>Sticky Mode</h3>\n\n<p><strong>Sticky mode</strong> — ключевая особенность pdb++. В этом режиме код остаётся на экране, и текущая строка подсвечивается при каждом шаге.</p>\n\n<pre><code>(Pdb++) sticky\nSticky mode on\n\n# Теперь при каждом 'n' или 's' весь код остаётся видимым\n# с подсветкой текущей строки\n</code></pre>\n\n<h3>Пример использования</h3>\n\n<pre><code>def fibonacci(n):\n \"\"\"Вычисляет n-е число Фибоначчи\"\"\"\n import pdb; pdb.set_trace()\n \n if n <= 1:\n return n\n \n a, b = 0, 1\n for i in range(2, n + 1):\n a, b = b, a + b\n \n return b\n\nresult = fibonacci(10)\nprint(f\"Результат: {result}\")\n</code></pre>\n\n<h4>Сессия отладки:</h4>\n<pre><code>> fibonacci()\n-> if n <= 1:\n\n(Pdb++) ll # Показать всю функцию с подсветкой\n 1 def fibonacci(n):\n 2 \"\"\"Вычисляет n-е число Фибоначчи\"\"\"\n 3 import pdb; pdb.set_trace()\n 4 \n 5 -> if n <= 1:\n 6 return n\n 7 \n 8 a, b = 0, 1\n 9 for i in range(2, n + 1):\n 10 a, b = b, a + b\n 11 \n 12 return b\n\n(Pdb++) sticky # Включить sticky mode\nSticky mode on\n\n(Pdb++) n # Следующая строка\n# Код остаётся на экране с новой подсветкой\n\n(Pdb++) display a, b # Автоматически показывать значения\n(Pdb++) n\na: 0, b: 1 # Автоматически выводится\n</code></pre>\n\n<h3>Преимущества</h3>\n\n<ul>\n<li>✅ <strong>Drop-in replacement</strong> — не нужно менять код</li>\n<li>✅ <strong>Sticky mode</strong> — удобство при пошаговой отладке</li>\n<li>✅ <strong>Лучшая визуализация</strong> — подсветка и цвета</li>\n<li>✅ <strong>Smart parsing</strong> — лучше отличает команды от Python-кода</li>\n<li>✅ <strong>Display expressions</strong> — удобное отслеживание значений</li>\n<li>✅ <strong>Tab completion</strong> — улучшенное автодополнение</li>\n</ul>\n\n<h3>Недостатки</h3>\n\n<ul>\n<li>❌ <strong>Требует установки</strong> — дополнительная зависимость</li>\n<li>❌ <strong>Может конфликтовать</strong> — при использовании других расширений pdb</li>\n<li>❌ <strong>Меньше документации</strong> — по сравнению с pdb/ipdb</li>\n</ul>\n\n<h3>Конфигурация</h3>\n\n<p>Создайте файл <code>~/.pdbrc.py</code>:</p>\n\n<pre><code>import pdb\n\nclass Config(pdb.DefaultConfig):\n # Включить sticky mode по умолчанию\n sticky_by_default = True\n \n # Цветовая схема\n use_pygments = True\n \n # Показывать hidden frames\n show_hidden_frames = False\n \n # Редактор по умолчанию\n editor = 'vim'\n</code></pre>\n\n<h3>Расширенные возможности</h3>\n\n<h4>1. Track expressions</h4>\n<pre><code>(Pdb++) track variable\n# Автоматически отслеживает изменения variable\n</code></pre>\n\n<h4>2. Hbreak (hidden breakpoint)</h4>\n<pre><code>(Pdb++) hbreak function_name\n# Breakpoint, который не показывается в списке\n</code></pre>\n\n<h4>3. Interact mode</h4>\n<pre><code>(Pdb++) interact\n# Запускает полноценную Python-консоль с доступом к локальным переменным\n</code></pre>\n\n<h3>Когда использовать pdb++</h3>\n\n<h4>✅ Используйте pdb++, если:</h4>\n<ul>\n<li>Хотите улучшенный pdb без изменения кода</li>\n<li>Нужен sticky mode для удобства</li>\n<li>Важна подсветка синтаксиса</li>\n<li>Работаете в терминале</li>\n<li>Не нужны специфичные возможности IPython</li>\n</ul>\n\n<h4>❌ Не используйте pdb++, если:</h4>\n<ul>\n<li>Уже используете ipdb и довольны им</li>\n<li>Нужны магические команды IPython</li>\n<li>Работаете в окружении, где нельзя устанавливать пакеты</li>\n</ul>\n\n<h3>Сравнение с другими отладчиками</h3>\n\n<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n<tr>\n<th>Возможность</th>\n<th>pdb</th>\n<th>pdb++</th>\n<th>ipdb</th>\n</tr>\n<tr>\n<td>Подсветка синтаксиса</td>\n<td>❌</td>\n<td>✅</td>\n<td>✅</td>\n</tr>\n<tr>\n<td>Sticky mode</td>\n<td>❌</td>\n<td>✅</td>\n<td>❌</td>\n</tr>\n<tr>\n<td>Автодополнение</td>\n<td>✅</td>\n<td>✅✅</td>\n<td>✅✅</td>\n</tr>\n<tr>\n<td>IPython магия</td>\n<td>❌</td>\n<td>❌</td>\n<td>✅</td>\n</tr>\n<tr>\n<td>Требует установки</td>\n<td>❌</td>\n<td>✅</td>\n<td>✅</td>\n</tr>\n</table>\n\n<h3>Полезные ресурсы</h3>\n\n<ul>\n<li>📚 GitHub: <a href=\"https://github.com/pdbpp/pdbpp\">https://github.com/pdbpp/pdbpp</a></li>\n<li>📚 Документация: <a href=\"https://pdbpp.readthedocs.io\">https://pdbpp.readthedocs.io</a></li>\n</ul>\n\n<p><strong>Вывод:</strong> pdb++ — отличный выбор для тех, кто хочет получить улучшенный опыт отладки без существенных изменений в workflow. Sticky mode делает пошаговую отладку значительно удобнее.</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" }