Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: breakpoint bug in the debugger

5 views
Skip to first unread message

Rocky Bernstein

unread,
Dec 19, 2011, 12:20:59 AM12/19/11
to conor...@gmail.com, debu...@perl.org
A while back on Tue, 31 May 2011 18:20:51 -0700 Conor wrote:

Not exactly a high priority bug, but I found that if you set a breakpoint on
> a line where a 'use' statement exists, the breakpoint will show as set and
> the debugger won't complain:
> $ perl -d breakpoint-bug.pl
> Loading DB routines from perl5db.pl version 1.32
> Editor support available.
> Enter h or `h h' for help, or `man perldebug' for more help.
> main::(breakpoint-bug.pl:7):
> 7: print "hello!\n";
> DB<1> b 9
> DB<2> v
> 4: use strict;
> 5: use warnings;
> 6
> 7==> print "hello!\n";
> 8
> 9:b use Data::Dumper;
> 10
> 11: print "goodbye!\n";
> 12
> 13: exit 0;
> DB<2>
> But, if you 'c' from line 7, you skip over the breakpoint on 9 as if it
> wasn't there. It isn't a huge problem (and I really should keep all of my
> 'use' statements at the beginning of the script), but I figured it was
> worth
> a mention.
> I couldn't figure out how to actually file a bug at http://rt.perl.org and
> http://search.cpan.org/~jesse/perl-5.14.0/lib/perl5db.pl didn't have the
> usual 'View/Report Bugs' that most modules have. I'm happy to file a bug if
> someone could point me in the right direction.
> -Conor


I just looked at this. I don't think there is a bug here.

The code has a "use" statement. A breakpoint is set on that which the
reporter doesn't feel is respected.
However, recall that "use" happens at compile time and this occurs before
the first stop you see in the debugger.

To verify this when I issued:
$Data::Dumper::VERSION from Devel::Trepan stopped at line 7, I got a
version string, e.g. '2.124'. (in perl5db use "p $Data::Dumper::VERSION"

Change the "use" to a "require" which then changes the semantics, and
you'll things will work as you seem to expect it to would above.

So in sum, I don't think there is a bug. Just perhaps confusion about how
execution works -- which I admit is confusing.

Rocky Bernstein

unread,
Dec 21, 2011, 3:52:52 AM12/21/11
to debu...@perl.org
At the risk of beating an already dead horse, since setting a breakpoint on
a "use" statement is likely to continue to cause confusions like this, I've
added a hack in Devel::Trepan to see if the line that a breakpoint has been
set at starts with the regexp /^\s*use\s+/. If so, a warning is issued
given.

The breakpoint is still set - it is just a warning. There are many ways
that this heuristic can fail. For example setting a breakpoint on a line
with:

use English; $x = 3;

may "skip" the "use" and still stop on the assignment statement.
0 new messages