Почему этот Perl НАЧИНАЕТ действие блока по-другому в отладчике?

Метод класса коллекционеров groupingBy () поддерживает дополнительный Collector в качестве второго аргумента:

public static <T, K, A, D>    Collector<T, ?, Map<K, D>> groupingBy(Function<? super T, ? extends K> classifier,Collector<? super T, A, D> downstream)

Выше можно записать в groupBy () два значения

Map<String, List<FullCalendarDTO>> result = countryDTOList.stream().collect(Collectors.groupingBy(FullCalendarDTO::getNameOfCountryOrRegion, Collectors.groupingBy(FullCalendarDTO::getLeagueDTO)));
12
задан Nifle 31 August 2010 в 19:24
поделиться

3 ответа

Это - проблема с созданием perl5db.pl __DIE__ обработчики. Если я локализую $SIG{__DIE__} в Вашем eval, вещи работают, как Вы ожидаете.

 eval { 
    local $SIG{__DIE__};
    die MyEx->new 
    };

Если Вы не делаете этого, Вы получаете обработчик от DB:: dbdie, который использует Карпа:: longmess. Этого не должно происходить, если dieLevel 0, но по умолчанию это 1, и это установлено на 1, если это не определяется. Это было патчем к perl5db.pl назад в 2001, и ранее значение по умолчанию было 0.

Вы, как предполагается, выключаете это с:

PERLDB_OPT="dieLevel=0" perl5.10.0 -d program

Но существует все еще ссылка кода в $SIG{__DIE__} после этого, и это - ссылка на dbdie. Я думаю, что это - ошибка в обработке глобальной переменной $prevdie в perl5db.pl dieLevel. В конце той подпрограммы, существует:

# perl5db.pl dieLevel, around line 7777 
       elsif ($prevdie) {
            $SIG{__DIE__} = $prevdie;
            print $OUT "Default die handler restored.\n";
        }

Но заметьте что после восстановления $SIG{__DIE__}, это удерживает предыдущее значение $prevdie, значение вообще является там утечками к другому вызову. Когда я выполняю ту командную строку, существует два вызова к dieLevel, прежде чем это обработает PERLDB_OPT, так $prevdie вероятно, грязно.

Так, это - насколько я добрался, прежде чем я не хотел думать о perl5db.pl больше.

14
ответ дан 2 December 2019 в 07:05
поделиться

Я считаю это ошибкой, любой временной код ведет себя по-другому в отладчике.

Ваша проблема могла бы быть связана с этим: Отладчик повреждает порчу таблицы символов. По существу отладчик, кажется, играет некоторые приемы с local - по-видимому, как часть игры в песочнице вещей обеспечить интерактивность. Очевидно, питание с таблицей символов может иметь неожиданные побочные эффекты. Я предположил бы, что отладчик локализует $@ и таким образом затемнение Вашего объекта. Я не могу думать об обходном решении.

5
ответ дан 2 December 2019 в 07:05
поделиться

Действительно ли возможно, что у Вас есть файл RC или переменная среды (PERLDB_OPTS) это изменяет dieLevel опция отладчика? Я лично не использовал dieLevel но по-видимому когда это установлено на значение, больше, чем нуль, это может вызвать раскручивание стека, и "имеет тенденцию безнадежно уничтожать любую программу, которая относится к ее обработке исключений серьезно". (Заключите в кавычки отсюда).

3
ответ дан 2 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: