Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Профилирование и отладка Python, отладка

Anna | 15.06.2014 | нет комментариев

В предыдущей статье мы завершили разговор о профилировании обзором событийных профайлеров.

Сегодня я предлагаю разглядеть способы отладки программ.

Раньше, чем начинать разговор об отладке, нам необходимо определиться, что же это такое. По обычии, обратимся к Википедии: «Отладка — выявление, локализация и устранение ошибок». Вообще, для удачной отладки программы, нам нужно (но не неизменно довольно) две вещи: значение переменных в том месте программы, в котором случилась оплошность, а так же стектрейс: порядок вызова функций, вплотную до ложной. Пригодно так же знать об окружении, в котором выполняется программа: присутствие (либо неимение) свободной памяти, системные ограничения (скажем, на число файловых дескрипторов) и так дальше, но это слегка выходит за пределы нашей статьи.

Классика стиля

Что делает начинающий программист, когда хочет «проникнуть» вовнутрь программы и исследовать содержимое переменных (в надобных местах) и логику работы программы (вызовы функций, выполнение условий)? Он прибегает к самому распространённому, самому простому и самому «действенному» методу отладки: расставляет по каждому коду «принты» (оператор print в Python 2.x и функция print() в Python 3.x). Но не только начинающие грешат этим: продвинутые разработчики частенько ленятся применять особые инструменты для отладки, веря быстренько, за пару минут, обнаружить причину ошибки и всё поправить, и не примечая, что искания ошибок растягиваются на часы и даже дни. Кстати, такой подход называют «журналированием».

Сюда же относится запись каждой требуемой для отладки программы информации в лог-файл. Изредка других вариантов нет, скажем, когда скрипт работает в продакшене и ошибки появляются эпизодически, либо когда оплошность проявляется только позже длинной работы программы (скажем, через две-три недели позже запуска).

Но мы же пишем на Python, так отчего бы не воспользоваться встроенными средствами отладки либо инструментами, предлагаемыми сообществом? Скажем, взамен обыкновенного логгирования в файл имеет толк применять Sentry, Дабы помимо сообщения об ошибке дозволено было отправить дополнительную информацию: стектрейс со всеми локальными переменными, всякие другие переменные и вообще всё, что посчитаете необходимым.

The Python Debugger

Python имеет встроенный отладчик: модуль pdb. В тезисе, на этом дозволено было бы завершить статью, т.к. pdb — Исключительно сильный отладчик и всё остальное, по сути, каждого лишь «украшательства» к нему. Но мы продолжим =)

Как дозволено подметить из наименования, pdb многое взял от gdb (GNU Project debugger) — отладчика Си (и не только) программ. К слову, программы на Python дозволено отлаживать и с поддержкой gdb, легко это немного труднее и дольше, правда тем, кто хочет углубиться в устройство языка, а так же тем, кто пишет сишные модули для питона без gdb никак не обойтись. Помимо того, gdb разрешает подключиться к теснее работающей программе (через её pid) и заниматься её отладкой «прямо на месте».

Я теперь не буду детально описывать pdb, вот восхитительная статья Дага Хеллманна (Doug Hellmann): pdb – Interactive Debugger на дюже пригодном источнике Python Module of the Week, а вот её отличный перевод на прогре: pdb – Интерактивный отладчик, исполненный пользователем xa4a.

IPython pdb

Предлагаю сразу поставить IPython и модуль ipdb для него:

nosetests --ipdb-failures

Безусловно, дозволено ловить всё и сразу:

59/593b392590397fd303e78bd7288f0518.png"/>
Не буду много о нём писать (Добросовестно говоря, я сам энергично им не пользовался), предлагаю прочитать короткую заметка на прогре: Комфортный отладчик для Python/Django планов от пользователя int22h либо больше полный обзор: Отладка Python/Django при помощи PuDB.

Winpdb


Standalone отладчик Python, на данный раз с полновесным графическим интерфейсом: Winpdb:

Его разработчики утверждают, что winpdb в 20 раз стремительней pdb, а так же поддерживает работу с тредами. Дюже огромный и подробнейший туториал дозволено обнаружить на этой странице: code.google.com/p/winpdb/wiki/DebuggingTutorial.

IDE


Отдельного слова заслуживают универсальные «комбайны» программирования: IDE, которые разрешают не выходя из редактора запустить код, отпрофилировать его либо запустить встроенный отладчик. Я, вероятно, выделю три среды, предуготовленные для разработки на Python: PyCharm, PyDev и PTVS.

Лирическое отхождение

К сожалению, лично я сколько не пытался, так и не сумел пересилить себя и променять скорость, ошеломительную эластичность и удобство работы с консолью и любимым текстовым редактором (будь то vim, emacs либо sublime text) на всякую из вышеперечисленных IDE, впрочем мои сотрудники удачно ими пользуются и следственно я советую правда бы дать этим восхитительным продуктам шанс и испробовать их.

Если Добросовестно, я не вижу специального смысла рассматривать всякую из этих IDE, довольно знать что они есть, что они удачно справляются со своими задачами и вы можете применять встроенный отладчик прямо из редактора, — это подлинно комфортно, резко и здорово.

Спасибо каждому, кто дочитал и прокомментировал.

Владимир Рудных,
Технический начальник Календаря Mail.Ru.
 Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB