Eclipse не отображает модуль Perl во время отладки (с EPIC) - PullRequest
3 голосов
/ 19 марта 2012

Я использую Eclipse GALILEO, работающий в Linux Ubuntu с плагином EPIC для запуска / отладки кода Perl, и у меня возникают некоторые проблемы при отладке. Обычно, когда я делаю пошаговую отладку и сталкиваюсь со строкой, где используется определенный модуль Perl, я нажимаю «Step Into», и затем файл модуля просматривается, и стрелка отладки также перемещается туда. Теперь кажется, что есть определенные модули, которые не следуют этому сценарию. Вместо этого, когда я нажимаю «Step Into», процесс запуска происходит где-то на заднем плане. Я имею в виду, что могу нажать «Step Over», и я увижу результаты кода, который выполняется, но я не вижу ни сам файл, ни стрелку.

Чтобы сделать его более понятным, обратитесь к следующему коду:

.
.
if (defined($sysname) && $sysname)
{
$sys_manager->setup_from_name($sysname);
$pf_manager->setup_from_name($sysname);
} else {
die "You must give either a --system parameter or an alias name.";
       }
}
.
.

Код от начала до указанной выше части можно найти здесь

Я выполняю пошаговую отладку, пока не достигну строки $sys_manager->setup_from_name($sysname);. Когда я достигаю его, я нажимаю кнопку «Step Into» (а не «Step Over»). Затем я ожидаю, что в eclipse откроется еще одно окно, которое переключит представление на модуль, где существует этот метод setup_from_name. Однако, как я упоминал ранее, «стрелка отладки» исчезает. На этом этапе, если я нажимаю кнопку «Step Over», работа продолжается где-то на заднем плане (я вижу, что переменные изменяются). Если я нажму «Шаг возврата», стрелка появится снова и продолжит просмотр видимого кода.

Я также хотел бы отметить, что эти конкретные модули были предоставлены как есть и не установлены с использованием CPAN. Расположение пакетов относительно кода, который их использует, выглядит следующим образом:

folder A/    #General folder
  folder B/  #Where the scripts which use the above mentioned modules are located
  folder C/  #Where the modules are located

Я надеюсь, что мой вопрос достаточно ясен, однако, если это не так, пожалуйста, прокомментируйте, и я уточню.

UPDATE Я включил EPIC «Консоль отладчика (экспериментальная)», и кажется, что появляется ошибка при достижении проблемного модуля во время процесса отладки. К сожалению, я не могу прочитать и понять эти данные отладчика. Ошибка - очень длинное сообщение, которое частично вставлено ниже:

S00000003$^AS00000002''NS00000003$^DS000000010NS00000003$^ES0000001b'No such file or directory'NS00000003$^FS000000012NS00000003$^HS00000003256NS00000003$^LS00000003

Полный текст сообщения об ошибке доступен по этой ссылке

Может быть, это прольет немного света ..

ОБНОВЛЕНИЕ 2 Мне было предложено проверить, существует ли соответствующий путь к модулю в «Perl Include Path» в свойствах проекта в Eclipse. Однако я сделал это, к сожалению, без изменений.

Ответы [ 3 ]

2 голосов
/ 05 апреля 2013

Чтобы заставить использование lib работать с относительными путями, я пропатчил Cwd.pm (снова) ... добавьте chomp.


sub fast_abs_path {
    local $ENV{PWD} = $ENV{PWD} || ''; # Guard against clobberage
    my $cwd = getcwd();
    require File::Spec;
    my $path = @_ ? shift : ($Curdir ||= File::Spec->curdir);

    # Detaint else we'll explode in taint mode.  This is safe because
    # we're not doing anything dangerous with it
    ($path) = $path =~ /(.*)/s;
    ($cwd)  = $cwd  =~ /(.*)/s;

    chomp($path);  # <<<-- added this chomp here

    unless (-e $path) {

Возможно, в коде EPIC есть лучшее исправление: chomp перед вызовом fast_abs_path, но дополнительный chomp никогда ничего не ранит ...

-Давид

1 голос
/ 21 марта 2012

Я думаю, плагин EPIC не может найти этот модуль. Я просто догадываюсь здесь:

Правильно ли вы установили @INC?

http://www.epic -ide.org / гид / ch03s02.php

Вы установили модуль PadWalker?

http://www.epic -ide.org / гид / ch02s09.php

Вы установили / проверили переменные env PERLLIB / PERL5LIB?

0 голосов
/ 08 апреля 2012

Кажется, я понял, как решить эту проблему.Как видно из кода, прикрепленного в качестве ссылки в исходном вопросе, есть следующая строка:

use lib '..';

Модуль, который упрощает манипуляции с @INC во время компиляции, указывая на модули Perl, которыене расположены в их пути по умолчанию (/usr/share/perl/5.10.1/).По какой-то причине эти модули могли быть запущены, но я не мог "шагнуть" в них.Когда я скопировал один из модулей в путь (/usr/share/perl/5.10.1/), я мог выполнить «Step Into» во время отладки.

Остался только вопрос, как сделать модули, которые не расположены в /usr/share/perl/5.10.1/ чтобы быть полностью доступным для отладки.Но я думаю, что это тема для дополнительного вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...