Отладка кода в Perl
Полное руководство по отладке Perl-кода с использованием различных инструментов и техник.
1. Встроенный отладчик Perl
1.1 Запуск отладчика
# Запуск скрипта в режиме отладки
perl -d script.pl
# Основные команды отладчика:
# s - шаг с заходом в подпрограммы
# n - шаг без захода в подпрограммы
# c - продолжить выполнение
# p - вывести значение выражения
# w - показать текущий контекст
# b - установить точку останова
# q - выйти из отладчика
Базовые команды встроенного отладчика Perl.
1.2 Установка точек останова
# В отладчике:
b 10 # Установить точку останова на строке 10
b subname # Установить точку останова на входе в подпрограмму
b 10 if $x > 5 # Условная точка останова
L # Показать все точки останова
D # Удалить все точки останова
Работа с точками останова в отладчике.
2. Практические примеры отладки
2.1 Отладка переменных
use strict;
use warnings;
my $debug = 1;
sub debug_print {
my ($message, $value) = @_;
if ($debug) {
print "DEBUG: $message = ";
print ref($value) ? Dumper($value) : $value;
print "\n";
}
}
my $data = { a => 1, b => 2 };
debug_print("Data structure", $data);
Пример функции для отладочного вывода.
2.2 Отладка с использованием Data::Dumper
use strict;
use warnings;
use Data::Dumper;
my $complex_data = {
users => [
{ name => 'Alice', age => 25 },
{ name => 'Bob', age => 30 }
],
settings => {
theme => 'dark',
language => 'ru'
}
};
# Вывод структуры данных с отступами
print Dumper($complex_data);
# Настройка вывода
$Data::Dumper::Indent = 2;
$Data::Dumper::Sortkeys = 1;
print Dumper($complex_data);
Использование Data::Dumper для отладки сложных структур данных.
3. Современные инструменты отладки
3.1 Devel::NYTProf
# Установка профилировщика
cpanm Devel::NYTProf
# Запуск профилирования
perl -d:NYTProf script.pl
# Генерация отчета
nytprofhtml
# В коде:
use Devel::NYTProf;
sub slow_function {
my ($n) = @_;
my $result = 0;
for my $i (1..$n) {
$result += $i;
}
return $result;
}
Использование Devel::NYTProf для профилирования кода.
3.2 Log::Log4perl
use strict;
use warnings;
use Log::Log4perl;
# Инициализация логгера
Log::Log4perl::init('log.conf');
my $logger = Log::Log4perl->get_logger('MyApp');
sub process_data {
my ($data) = @_;
$logger->debug("Начало обработки данных");
$logger->info("Получены данные: $data");
if ($data =~ /error/) {
$logger->error("Обнаружена ошибка в данных");
}
$logger->debug("Завершение обработки данных");
}
Использование Log::Log4perl для структурированного логирования.
4. Лучшие практики отладки
4.1 Условная компиляция
use strict;
use warnings;
my $DEBUG = 1;
if ($DEBUG) {
use Data::Dumper;
use Devel::Peek;
}
sub debug_dump {
return unless $DEBUG;
my ($var) = @_;
print Dumper($var);
Dump($var);
}
Использование условной компиляции для отладочного кода.
4.2 Тестирование и отладка
use strict;
use warnings;
use Test::More;
use Test::Exception;
sub divide {
my ($a, $b) = @_;
die "Division by zero" if $b == 0;
return $a / $b;
}
# Тестирование нормального случая
is(divide(10, 2), 5, '10 / 2 = 5');
# Тестирование исключения
dies_ok { divide(10, 0) } 'Division by zero dies';
done_testing();
Использование модульного тестирования для отладки.
Это руководство охватывает основные аспекты отладки в Perl, включая:
- Использование встроенного отладчика Perl
- Работу с точками останова
- Отладочный вывод и дампинг данных
- Профилирование кода с Devel::NYTProf
- Структурированное логирование с Log::Log4perl
- Условную компиляцию отладочного кода
- Использование модульного тестирования для отладки