Eclipse does not display Perl module while debugging (with EPIC)

I am using Eclipse GALILEO on Linux Ubuntu with EPIC plugin to run / debug Perl code and I am having some problems while debugging. Usually, when I step through the debug and come across a line that uses a specific Perl module, I click "Step Into" and then go through the module file and the debug arrow is transferred there as well. Now it seems that there are certain modules that don't follow this scenario. Instead, when I click Step Into, the current process is happening somewhere in the background. I mean, I can click "Step Over" and I can see the results of the code that is being executed, but I cannot see the file or arrow itself.

To make it clearer, refer to the following code snippet:

.
.
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.";
       }
}
.
.

      

The code from start to part shown above can be found here

I am doing step by step debugging until I get to the line $sys_manager->setup_from_name($sysname);

. When I get to it, I'll press the Step by Step button (not Step Over). Then I expect another window to open in eclipse which will switch the view to the module where this method exists setup_from_name

. However, as I mentioned earlier, the "debug arrow" disappears. At this point, if I click the Step by Step button, the work continues somewhere in the background (I can see the variables changing). If I click on "Step Return", the arrow appears again and continues the visible code.

I would also like to mention that these specific modules were provided as-is and not installed using CPAN. The location of the packages in relation to the code they use is as follows:

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

      

I hope my question is clear enough, but if he doesn't comment and I'll clarify.

UPDATE I have enabled EPIC "Debugger Console (experimental)" and it seems that an error appears when reaching the problematic module during the debugging process. Unfortunately I cannot read and understand the debugger data. The error is a very long message that is partially inserted below:

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

      

The full error message is available via the link

Perhaps this will shed some light.

UPDATE 2 I was asked to check that the corresponding module path exists in the "Perl Include Path" in the project properties in Eclipse. I did it unfortunately with no changes.

+3


source to share


3 answers


I think I figured out how to solve this problem. As you can see from the code linked as a reference in the original question, the following line exists:

use lib '..';

      



What is a module that makes @INC easier to manipulate at compile time by pointing to Perl modules that are not located in the default path ( /usr/share/perl/5.10.1/

). For some reason, these modules could be launched, but I could not "enter" them. When I copied one of the modules to path ( /usr/share/perl/5.10.1/

), I was able to "Step Into" while debugging.

The only thing left to do is to decide how to make modules that are not in /usr/share/perl/5.10.1/

fully available for debugging. But I think this is a topic for an additional question.

0


source


To use lib with relative paths, I fixed Cwd.pm (again) ... add 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) {

      




There might be a better fix in the EPIC code, chomp before calling fast_abs_path, but the extra chomp will never hurt anything ...

-David

+2


source


I think the EPIC plugin will not be able to find this module. I'm just guessing here:

Have you installed @INC correctly?

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

Have you installed the PadWalker module?

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

Have you set / checked the PERLLIB / PERL5LIB env variables?

+1


source







All Articles