Debugging: Step into .pm

frugtor wrote on Mon Jul 23 11:00:37 MEST 2007:
Hello!

Debugging with EPIC is very nice! But what I didn't found out is how to
step into a module.
The module is in the same project. If I step through the main .pl file to
a call to a sub routine in that module then I see the name of the module
file and the line number in it but at the file I don't see any position
marker and no variables.
If I set a breakpoint into the module it doesn't stop there (this is working
for break points in the main file!).

Greetings
frugtor wrote on Mon Jul 23 11:01:56 MEST 2007:
I use EPIC 0.5.38.
jploski wrote on Mon Jul 23 12:03:52 MEST 2007:
Please upgrade to the latest 'testing' release (0.6.x).
frugtor wrote on Mon Jul 23 14:32:51 MEST 2007:
Thanx for the fast reply!

I updated to 0.6.11. Now I can see the variables of the module but the position
in the module isn't hilighted (like before; I have to walk myself to the
corresponding position).
Breakpoints stopped working completly (also in the main file!) The only
way to step through is to tell EPIC to suspend at the first statement!!!

Some additional information about my config:
- Win XP
- Eclipse SDK
  Version: 3.3.0
  Build id: I20070625-1500
  (Europa)
- ActivePerl 5.8.8 Build 820
jploski wrote on Mon Jul 23 18:19:26 MEST 2007:
Interesting... Are your project files by chance in some unusual location
(like on a network share rather than on the local disk)? Enable the debugger
console in EPIC Preferences and post its content (using a test case with
some breakpoints) here. See earlier messages for what I mean with "debugger
console".
frugtor wrote on Mon Jul 23 18:59:01 MEST 2007:
Good point about the network drive! Yes the whole project is located on
a VMWare and from Windows I access it via network (Samba).

So I aded a little test.pl:

| #/!usr/bin/perl
| 
| use strict;
| 
| my($nValue) = 1;
| 
| print("I'm at bp #$nValue\n");
| 
| $nValue++;
| 
| print("I'm at bp #$nValue\n");
| 
| $nValue++;
| 
| print("I'm at bp #$nValue (the last one)\n");
| 
| print("Bye...\n");

The breakpoints are located at the print("I'm at bp...

Here is the Debugger console output:
(Interesting: "Undefined subroutine &epic_breakpoints::add_breakpoint"...)

Loading DB routines from perl5db.pl version 1.28
Editor support available.

Enter h or `h h' for help, or `perldoc perldebug' for more help.

main::(//192.168.248.128/data/www/cgi-bin2/test.pl:5):
5:	my($nValue) = 1;
  DB<1> printf $DB::OUT "%vd", $^V;
5.8.8
  DB<2> print $DB::OUT eval { require PadWalker; PadWalker->VERSION(0.08)
}
0.09
  DB<3> ;{
my $file = <<'EOT';
//192.168.248.128/data/www/cgi-bin2/test.pl
EOT
my $line = <<'EOT';
15
EOT
my $cond = '';

epic_breakpoints::add_breakpoint($file, $line, $cond);
};
Undefined subroutine &epic_breakpoints::add_breakpoint called at (eval 11)[C:/Perl/lib/perl5db.pl:628]
line 11.

  DB<4> ;{
my $file = <<'EOT';
//192.168.248.128/data/www/cgi-bin2/test.pl
EOT
my $line = <<'EOT';
11
EOT
my $cond = '';

epic_breakpoints::add_breakpoint($file, $line, $cond);
};
Undefined subroutine &epic_breakpoints::add_breakpoint called at (eval 12)[C:/Perl/lib/perl5db.pl:628]
line 11.

  DB<5> ;{
my $file = <<'EOT';
//192.168.248.128/data/www/cgi-bin2/test.pl
EOT
my $line = <<'EOT';
7
EOT
my $cond = '';

epic_breakpoints::add_breakpoint($file, $line, $cond);
};
Undefined subroutine &epic_breakpoints::add_breakpoint called at (eval 13)[C:/Perl/lib/perl5db.pl:628]
line 11.

  DB<6> .
main::(//192.168.248.128/data/www/cgi-bin2/test.pl:5):
5:	my($nValue) = 1;
  DB<7> T
  DB<8> .
main::(//192.168.248.128/data/www/cgi-bin2/test.pl:5):
5:	my($nValue) = 1;
  DB<9> .
main::(//192.168.248.128/data/www/cgi-bin2/test.pl:5):
5:	my($nValue) = 1;
  DB<10> .
main::(//192.168.248.128/data/www/cgi-bin2/test.pl:5):
5:	my($nValue) = 1;
  DB<11> c
Debugged program terminated.  Use q to quit or R to restart,
  use o inhibit_exit to avoid stopping after program termination,
  h q, h R or h o to get additional info.  
  DB<12> q
jploski wrote on Mon Jul 23 20:13:15 MEST 2007:
The epic_breakpoints::add_breakpoint procedure is defined in file $WORKSPACE/.metadata/.plugins/org.epic.debug/epic_breakpoints.pm,
which should be picked up according to the @INC path set by EPIC when starting
in debugger mode. You can see the actual Perl invocation used by EPIC in
$WORKSPACE/.metadata/.log  Maybe with this information you can figure out
why epic_breakpoints.pm is not found. As a workaround, you may try copying
epic_breakpoints.pm to some other directory and adding the path to this
directory in the Include Path dialog in project properties.

I have no experience with debugging files located on network shares. They
may or may not cause problems with respect to ignored breakpoints. After
you have resolved the problem with add_breakpoint, if you still experience
difficulties, try creating a project on a local disk and see if this changes
anything.
frugtor wrote on Tue Jul 24 08:22:54 MEST 2007:
I checked one thing that may also be the reason for this behavior:
My project is not within the work space directory!
If I create a project inside the work space directory (which is on a local
hard disk) everything works fine!
So I think that could be the reason and the maybe not the network location!?
Then I think I must reorder my development environment somehow and then
it will work.

Thanks a lot for your help!
jploski wrote on Tue Jul 24 10:48:41 MEST 2007:
I can debug projects outside of the workspace without problems (if you mean
a project which was created in Eclipse, but with a different directory than
the default one inside of the workspace). It would help if you could post
the command line used by EPIC to start "perl -d". This command line is written
to the file $WORKSPACE/.metadata/.log when you start the debugger with the
"debugger console" enabled.
frugtor wrote on Thu Jul 26 13:19:07 MEST 2007:
Hello again!

I checked my project through and found the entry "C:/perl/lib" in the "Perl
Include Path" of my project properties (or so I delete it to fast...) which
let the debugger load a different perl5db (not the one from the .metadata...
directory).
Removing that entry now everything works like in EPIC 0.5.x: The breakpoints
in the modules are ignored.
I set up a little test project and played a little bit around with the following
result:
It does not work if the module is in an own directory and
use lib "moduledir";
is used in the main file!
(No matter if "moduledir" is mentioned in the "Perl Include Path" or not...)
If I remove the "use lib" and just add "moduledir" to "Perl Include Path"
everything works fine!
jploski wrote on Thu Jul 26 17:35:44 MEST 2007:
This is hopefully fixed in 0.6.12.

Note: The above is an archived snapshot of a forum thread. Use the original thread at sf.net to post comments.