Debugging: Step into .pm

Help
2007-07-23
2013-05-20
  • 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

     
    • I use EPIC 0.5.38.

       
      • Jan Ploski
        Jan Ploski
        2007-07-23

        Please upgrade to the latest 'testing' release (0.6.x).

         
        • 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

           
          • Jan Ploski
            Jan Ploski
            2007-07-23

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

             
            • 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

               
              • Jan Ploski
                Jan Ploski
                2007-07-23

                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.

                 
                • 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!

                   
                  • Jan Ploski
                    Jan Ploski
                    2007-07-24

                    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.

                     
                    • 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!

                       
                      • Jan Ploski
                        Jan Ploski
                        2007-07-26

                        This is hopefully fixed in 0.6.12.

                         
                        • Oliver Trosien
                          Oliver Trosien
                          2009-06-24

                          JFTR: For me it helped removing Perl/lib from the include path.