3

我正在使用带有 EPIC 插件的 Linux Ubuntu 上运行的 Eclipse GALILEO 来运行/调试 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”按钮,运行会在后台某处继续(我可以看到变量正在被修改)。如果我单击“Step Return”,箭头会再次出现并继续通过可见代码。

我还想提一下,这些特定模块是按原样提供的,而不是使用 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

我希望我的问题足够清楚,但如果不是,请发表评论,我会澄清。

更新 我已启用 EPIC“调试器控制台(实验性)”,并且在调试过程中到达有问题的模块时似乎出现错误。不幸的是,我无法阅读和理解这个调试器数据。该错误是一条很长的消息,部分粘贴在下面:

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

完整的错误消息可通过此链接获得

也许这会溢出一些光..

更新 2 有人建议我验证相关模块路径是否存在于 Eclipse 项目属性的“Perl 包含路径”中。不幸的是,我已经这样做了,没有任何变化。

4

3 回答 3

2

为了让相对路径的使用库正常工作,我修补了 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 代码中可能有一个更好的修复方法,在调用 fast_abs_path 之前进行 chomp,但是额外的 chomp 永远不会伤害任何东西......

-大卫

于 2013-04-05T13:31:55.500 回答
1

我认为,EPIC 插件无法找到该模块。我只是在这里猜测:

您是否正确设置了@INC?

http://www.epic-ide.org/guide/ch03s02.php

您是否设置了 PadWalker 模块?

http://www.epic-ide.org/guide/ch02s09.php

您是否设置/检查了 PERLLIB/PERL5LIB 环境变量?

于 2012-03-21T14:46:03.710 回答
0

看来我已经意识到如何解决这个问题了。从最初问题中作为链接附加的代码中可以看出,有以下行:

use lib '..';

这是一个在编译时简化@INC 操作的模块,它指向不位于其默认路径(/usr/share/perl/5.10.1/)的 Perl 模块。出于某种原因,这些模块可以运行,但我无法“进入”它们。当我将其中一个模块复制到 ( /usr/share/perl/5.10.1/) 路径时,我可以在调试期间执行“Step Into”。

剩下的唯一问题是如何使不在其中的模块/usr/share/perl/5.10.1/完全可用于调试。但我想这是一个附加问题的主题。

于 2012-04-08T10:22:06.027 回答