Bugs displaying perl5db.pl
seitfa wrote on Sat Jul 8 15:27:01 MEST 2006:
Hi,
I watched perl5db.pl in EPIC and found some Bugs (I think).
Of cause this is very strange code => it's a debugger.
1. 
sub sub {
}
* This is not recogniced as a sub.
2.
sub print_trace {
    local $\ = '';
    my $fh = shift;
    # If this is going to a slave editor, but we're not the primary
    # debugger, reset it first.
    resetterm(1)
      if $fh        eq $LINEINFO    # slave editor
      and $LINEINFO eq $OUT         # normal output
      and $term_pid != $$;          # not the primary
    # Collect the actual trace information to be formatted.
    # This is an array of hashes of subroutine call info.
    my @sub = dump_trace( $_[0] + 1, $_[1] );
    # Grab the "short report" flag from @_.
    my $short = $_[2];              # Print short report, next one for sub
name
    # Run through the traceback info, format it, and print it.
    my $s;
    for ( $i = 0 ; $i <= $#sub ; $i++ ) {
        # Drop out if the user has lost interest and hit control-C.
        last if $signal;
        # Set the separator so arrys print nice.
        local $" = ', ';
        # Grab and stringify the arguments if they are there.
        my $args =
          defined $sub[$i]{args}
          ? "(@{ $sub[$i]{args} })"
          : '';
        # Shorten them up if $maxtrace says they're too long.
        $args = ( substr $args, 0, $maxtrace - 3 ) . '...'
          if length $args > $maxtrace;
        # Get the file name.
        my $file = $sub[$i]{file};
        # Put in a filename header if short is off.
        $file = $file eq '-e' ? $file : "file `$file'" unless $short;
        # Get the actual sub's name, and shorten to $maxtrace's requirement.
        $s = $sub[$i]{sub};
        $s = ( substr $s, 0, $maxtrace - 3 ) . '...' if length $s > $maxtrace;
        # Short report uses trimmed file and sub names.
        if ($short) {
            my $sub = @_ >= 4 ? $_[3] : $s;
            print $fh "$sub[$i]{context}=$sub$args from $file:$sub[$i]{line}\n";
        } ## end if ($short)
        # Non-short report includes full names.
        else {
            print $fh "$sub[$i]{context} = $s$args"
              . " called from $file"
              . " line $sub[$i]{line}\n";
        }
    } ## end for ($i = 0 ; $i <= $#sub...
} ## end sub print_trace
* Brackets are matched wronge
* "$s = $sub[$i]{sub};
        $s = ( substr $s, 0, $maxtrace - 3 )" is not the beginning of a
sub, or is it?
* "if ($short)" is displayed as a sting, is it?
3. file perl5db.pl
* Package main is displayed many times
* Package DB is displayed many times
> I don't know if this is wanted
I hope I don't bother you to much. :-)
I am not a perl-guru excuse me if I made a mistake.
Thanks
jploski wrote on Sat Jul 8 16:15:47 MEST 2006:
This illustrates the known fact that only Perl can parse Perl (this translates
into - no good tools for Perl; EPIC's functionality is a joke compared to
JDT, for example). Regarding your observations:
1. sub sub - using keywords as procedure names... no comments.
2. Here the {sub} is wrongly taken a keyword. {'sub'} would be fine. Perl
has a way of distinguishing literals from keywords based on context, but
EPIC at present does not.
3. The multiple appearance of 'main' is a direct consequence of the above
problem.
Note that generally, it is okay for a package to appear multiple times in
the Outline - one time per package keyword occurrence in the source file.
seitfa wrote on Mon Jul 17 22:34:33 MEST 2006:
Isn't there a way to "ask" perl what a piece of code is? (I hope you know what I mean)
Note: The above is an archived snapshot of a forum thread. Use the original thread at sf.net to post comments.