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.