Summary: | Не определена переменная окружения PERL5DB_THREADED | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Владимир Диденко <vladimir.didenko> |
Component: | perl-devel | Assignee: | at <at> |
Status: | CLOSED NOTABUG | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P3 | CC: | at, crux, viy |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Владимир Диденко
2013-10-08 16:33:16 MSK
Фишка в том, что нужно самому устанавливать переменную PERL5DB_THREADED, если происходит отладка приложения использующего треды. Об этом явно написано в документации http://perldoc.perl.org/perlrun.html#ENVIRONMENT В Perl 5.18 код дебаггера был очень здорово переработан. После этого изменения http://perl5.git.perl.org/perl.git/commitdiff/cde405a6b9b86bd8110f63531b42d89590a4c56e запуск отладки приложения, использующего threads::shared без установленной переменной окружения PERL5DB_THREADED перестал работать. Там видно, что раньше, если переменная окружения не была определена, то вместо функций lock и share ставились пустые заглушки. Это значит, что при отладке приложения с тредами эти функции ничего не делали, что неправильно и было чревато ошибками. Понятно, спасибо за разъяснения. Извиняюсь за ложную тревогу. Хм, но похоже с PERL5DB_THREADED тоже не работает. На следующем тестовом примере #!/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'); Это я опять что-то не так делаю? (В ответ на комментарий №3) > Хм, но похоже с PERL5DB_THREADED тоже не работает. На следующем тестовом > примере ... > отладчик зависает на строчке > my $thr = threads->create('start_thread', 'argument'); > > Это я опять что-то не так делаю? Тестовый пример можно упростить до $ PERLDB_OPTS="noTTY" perl -Mthreads -dt -e "threads->create(sub{})->join" (опция -dt как раз устанавливает переменную PERL5DB_THREADED) Виснет намертво (похоже на дедлок), убивается только через KILL. Я посмотрел, это не работает ни на одном perl (с perl 5.8.8 и perl5db.pl версии 1.28). Т.е. похоже никогда не работало. (В ответ на комментарий №4) > Т.е. похоже никогда не работало. Тогда непонятно, что делать в этой ситуации - идти жаловаться в апстрим? Ведь теоретически это же должно работать, PERL5DB_THREADED не для красоты же сделан - например, в откопанной книжке "Pro Perl Debugging" у автора вроде бы все работало, он говорил о версиях >= 5.8.5. |