Команда продолжить игнорирует точки останова

Я получаю ошибки при использовании CPAN и, поскольку вывод довольно бесполезен, прибегаю к отладке этого.

$ perl -d /usr/bin/cpan CPAN

Loading DB routines from perl5db.pl version 1.33
<...>
main::(/usr/bin/cpan:2):            eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
main::(/usr/bin/cpan:3):                if $running_under_some_shell;
  DB<1> b /usr/lib/perl5/5.14/HTTP/Tiny.pm:125
  DB<2> L
/usr/bin/cpan:
 2:         eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
   break if (/usr/lib/perl5/5.14/HTTP/Tiny.pm:125)
  DB<2> c

После c программа запускается до конца, игнорируя точку останова.

/usr/lib/perl5/5.14/HTTP/Tiny.pm:125 это следующая строка, вне каких-либо условных блоков.

my $request = {
    method    => $method,
    scheme    => $scheme,
    host_port => ($port == $DefaultPort{$scheme} ? $host : "$host:$port"),
    uri       => $path_query,
    headers   => {},
};

Установка разрыва в строке 142 (это вызывает ошибки, которые я отлаживаю) не имеет значения.

От L вывод, похоже, что точка останова установлена ​​на текущей строке, а не на той, которая мне нужна. Но, perldebug списки b file:line как действительный синтаксис.

1 ответ

Решение

Этот синтаксис может быть более новым дополнением, я также не смог заставить его работать здесь. У меня 5.8.8 на Unix и 5.10.1 на Windows, и оба, похоже, не работают. Я получаю точку останова на моей текущей строке, как и вы (она обрабатывает всю строку как условие).

Я бы предложил использовать другой синтаксис, как показано ниже.

Перерыв на метод:

b HTTP::Tiny::some_method

Выберите файл, разбейте на строку (он соответствует путям, а не пространствам имен модулей):

f HTTP/Tiny
b 125

Если они загружаются во время выполнения с помощью require или eval, отладчик не будет знать о модуле, поэтому вы можете просто набрать use HTTP::Tiny в отладчике сначала заставить его загрузить.

Другие вопросы по тегам