воскресенье, ноября 04, 2007

Отладка perl программ. Основы и инструментарий.

Эта заметка будет в основном интересна тем кто не выработал свою методологию отладки приложений perl или не подобрал нужного инструментария для этого.

В принципе для того чтобы отлаживать программу написанную на perl достаточно просто иметь perl. Довольно часто (особенно при отладке на завершающей стадии сложных многопоточных программ) наиболее удобным способом является отладка логгированием в файл или прямо в stdout. Для логгирования в файл есть достаточно удобный модуль File::Log. Кроме грамотного оформления(timestamp, pid и т.п.) лога он позволяет менять детализацию лога с помощью уровней дебага, т.е. при создании объекта класса File::Log задаётся уровень для отсечения сообщений с уровнем выше данного уровня (т.е. в лог будут попадать только сообщения с уровнем ниже или равным данному уровню).

Естественно необходим дебаггер в классическом понятии. В простейших случаях или когда больше ничего нет можно использовать стандартный perl debugger: perl -d script.pl . Ну расписывать о том как его использовать смысла нет - читайте perldoc perldebug, perldoc perldebtut.

Если же хочется большего удобства то можно воспользоваться более удобными дебагерами. Можно поставить EPIC под Eclipse. конечно использовать его только для дебага это почти как по воробьям из пушки, но если вы и пишите под Eclipse то вобщем искать альтернативу EPIC можно только в если дебагер под Eclipse не заработает, а такое бывает: вот например ссылка.

Если вы не хотите использовать Eclipse то может использовать гуёвый отладчик perl на базе Tk - Devel::ptkdb. Использовать так: perl -d:ptkdb program.pl . Внешний вид этого дебаггера на скриншоте ниже. В правой части окна есть три таба, "Exprs" для просмотра/вычисления значений переменных/выражений, "Subs" для просмотра функций и методов классов сгрупированный по package'ам, BrkPts для просмотра и управления точками останова. Обычно когда я хочу поставить breakpoint я действую так: на вкладке "Subs" нахожу функцию/метод и два раза кликаю на него, таким образом в левой части окна открывается исходник с этой функцией/методом, далее прокручиваю до нужной строки и ставлю breakpoint или несколько breakpoint'ов. Если что-то пошло не так, то я не закрывая ptkdb правлю исходник, затем жму Menu->Control->Restart и программа перезапускается с сохранёнными breakpoint'ами. Вобщем суммарно преимущества ptkdb над встроенным дабаггером велики.


Кроме этого есть ещё Komodo для windows и Affrus для Mac OS, но они платные и я их не использовал - так что ничего про них сказать не могу.

Комментариев нет: