LINUX.ORG.RU

Отладка многопоточных приложений в perl.

 ,


2

3

Тут столкнулся с граблями отладки многопоточных приложений в perl. Оказывается, до запуска отладчика нужно проэкспортировать переменную окружения PERL5DB_THREADED в ненулевое значение. Скользкость ситуации состоит в том, что вплоть до версии 5.16 отладчик не ругается на непроинициализированное значение, при этом работает неправильно! В новой версии 5.18 perl вываливается с сообщением об ошибке, из которой, впрочем, тоже не понять в чем, собственно, дело.

Ссылка на документацию

http://perldoc.perl.org/perlrun.html#ENVIRONMENT

В общем, решил поделиться, вдруг кому пригодится.

Update: в общем, оказалось, что с PERL5DB_THREADED отладка не работает (по крайней мере в 5.16 и в 5.18). На следующем тестовом примере

#!/usr/bin/perl 

use threads;
sub start_thread 
{
    my @args = @_;
    print('Thread started: ', join(' ', @args), "\n");
    exit 0;
}
my $thr = threads->create('start_thread', 'argument');
$thr->join();

дебаггер зависает на строчке

my $thr = threads->create('start_thread', 'argument');

Кто-нибудь сталкивался с таким? Это баг в перле, или я что-то не так делаю?

★★★★★

Последнее исправление: Vovka-Korovka (всего исправлений: 2)

а чем Вы пользуетесь для отладки? встроенным или ИДЕ? Если ИДЕ, то каким?

И да, я многопоточные отлаживал print-ами.

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

а чем Вы пользуетесь для отладки? встроенным или ИДЕ?

Встроенным.

Vovka-Korovka ★★★★★
() автор топика
Ответ на: комментарий от gh0stwizard

Имхо, забудь про потоки в перле.

Для моей задачи они отлично подходят. Единственное, непонятно как правильно их отлаживать.

Vovka-Korovka ★★★★★
() автор топика

Имхо, забудь про отладчики вообще. Отлаживай принтами и методом пристального взгляда.

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