LINUX.ORG.RU

Визуализация отладки кода в Python 3

 


0

2

1) Хочется упростить процесс отлаживания своего скрипта на Python 3.2.3. У меня множество функций, которые обрабатывают текст, и я хочу научиться быстро определять, где что пошло не так. На разбор функции за функцией уходит много времени. Сначала подключил логи. Это хорошо, но все функции идут одним списком. Потом возникла мысль создавать XML из лога, но это недостаточно наглядно. Ну и наконец, стал смотреть в сторону создания блок-схем. Предполагается, что блок-схемы будут представлены, например, блоками с названиями функций и результатами этих функций. Отсюда можно будет легко проследить результат их работы. У кого какие соображения на сей счет? Делали ли вы что-нибудь подобное?

2) Стал копать в сторону igraph, но мне не удалось его установить. Пакета python3-igraph нет на Debian Wheezy. Скачал исходники igraph с https://pypi.python.org/pypi/python-igraph/0.7, дополнительно установил libigraph0, libigraph0-dev, python3-dev, libxml2-dev. При компиляции igraph происходит следующее:

pete@crunchbang:~/downloads/python-igraph-0.7$ sudo python3 setup.py install
[sudo] password for pete: 
running install
Checking .pth file support in /usr/local/lib/python3.2/dist-packages/
/usr/bin/python3 -E -c pass
TEST PASSED: /usr/local/lib/python3.2/dist-packages/ appears to support .pth files
running bdist_egg
running egg_info
writing python_igraph.egg-info/PKG-INFO
writing top-level names to python_igraph.egg-info/top_level.txt
writing dependency_links to python_igraph.egg-info/dependency_links.txt
reading manifest file 'python_igraph.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'python_igraph.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-i686/egg
running install_lib
running build_py
running build_ext
Build type: dynamic extension
Include path: 
Library path: 
Linked dynamic libraries: igraph
Linked static libraries: 
Extra compiler options: 
Extra linker options: 
building 'igraph._igraph' extension
gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -fPIC -I../../build/include -I../../include -I/usr/local/include/igraph -I/usr/include/igraph -I/usr/include/python3.2mu -c src/vertexobject.c -o build/temp.linux-i686-3.2/src/vertexobject.o
In file included from src/vertexobject.c:25:0:
src/attributes.h:27:31: fatal error: igraph_attributes.h: Нет такого файла или каталога
compilation terminated.
error: command 'gcc' failed with exit status 1

Гугл ничего внятного по поводу того, где достать igraph_attributes.h, не сказал. Как установить?

Deleted

А что дадут блок-схемы? Выполнение программы ведь линейное: передал данные в одну функцию, та в другую, и так пока не получится результат? И будет тот же список, только с блоками и стрелками.

Может что-то типа pdb, дебаггера, чтобы последовательно прогонять тестовые данные и смотреть, всё ли работает так, как надо?

Virtuos86 ★★★★★
()

KCachegrind али какой питоноаналог

у питона же байтокод всяко есть отладчики и прочии тулы для профилировки на уровне питоно-сырца

qulinxao ★★☆
()

что ты называеш блоксхемами это не они.

тебя интересует граф зависимостей/вызовов между функциями .

такие картинки строят на основе логов профилировщиков либо на основе статических анализаторов.

qulinxao ★★☆
()
Ответ на: комментарий от anonymous

Придумали. Не придумали, как людей заставить их делать

saibogo ★★★★
()
Ответ на: комментарий от Virtuos86

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

Deleted
()

дополнительно установил libigraph0, libigraph0-dev,

Они в визи протухшие. Це ж дебиан.

anonymous
()
Ответ на: комментарий от qulinxao

Мне бы все-таки хотелось для начала поставить igraph (вопрос 2). Из того, что я прочитал, это вроде то, что нужно. Кроме того, я смогу генерировать SVG с графами прямо из скрипта.

Deleted
()
Ответ на: комментарий от anonymous

Анонимус, ты зачем здесь возник? Троллят в толксах и новостях, а здесь находят решение проблем.

Deleted
()
Ответ на: комментарий от Deleted

Анонимус просто поделился инфой по второй проблеме. К жжению пониже спины ТС никакого отношения не имеет.

И конкретно тебя больше помогать не будет, хамло ты этакое.

anonymous
()
Ответ на: комментарий от anonymous

Человек же прямым текстом пишет «написал тут говнокод на модной версии модного языка, про тестирование не знаю, отлаживаться не умею и не хочу, а хочу штуку с кнопкой 'сделать всё хорошо', но она не ставится под дебиан :-(». Чем тут помочь то можно вообще?

ei-grad ★★★★★
()
Ответ на: комментарий от anonymous

Анонимус просто поделился инфой по второй проблеме.

Какой инфой? Что мне надо ставить более новый дистрибутив ради одного питоновского модуля? Really?

Deleted
()
Ответ на: комментарий от Deleted

Что мне надо ставить более новый дистрибутив ради одного питоновского модуля? Really?

Бугурт оказывает пагубное воздействие на когнитивные функции. Нет, посыл был не таков. Со второй попытки, думаю, угадаешь.

anonymous
()
Ответ на: комментарий от anonymous

Причем здесь бугурт? :) Я думал, ты решил потроллить по типу stable vs testing vs sid или debian vs ubuntu. Извиняй, если чем-то обидел :) Что касается слишком старых библиотек - не думаю. Вряд ли они были бы в дистрибутиве, если бы основное собрать было нельзя.

Я, похоже, просто не поставил igraph C library до python-igraph.

Deleted
()
Ответ на: комментарий от Deleted

igraph_attributes.h появился только в жесси. Старый python-igraph может соберется в твоем окружении, но его надо еще найти.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо. Вообще-то, это странно, потому что после того, как я установил igraph C library, у меня нормально поставился и python-igraph. Вот только import igraph выдает

ImportError: /usr/local/lib/python3.2/dist-packages/python_igraph-0.7-py3.2-linux-i686.egg/igraph/_igraph.cpython-32mu.so: undefined symbol: igraph_warning_handler_ignore
Сделал
export LD_LIBRARY_PATH=/usr/lib/i386-linux-gnu/libigraph.so
но это не помогло.

Deleted
()
Ответ на: комментарий от Deleted

Удалил все, что было связано с igraph, установил заново igraph C library и python-igraph. Теперь все работает. Вопрос 2 можно считать решенным.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.