Skip to content

Commit

Permalink
[perl #71806] perldb does not setup %dbline with the shebang option -d
Browse files Browse the repository at this point in the history
The first time gv_fetchfile is called for a particular file, it
creates the glob and, if debugging is on, creates an AV. If the glob
already exists (i.e., in subsequent calls), the AV is not created. The
attached patch moves the check for debugging mode and the creation of
the AV outside the if-block that checks whether the glob exists.

This bug seems to have existed for a very long time and has been
intermittent. It seems that many different things can change the order
in which #!perl -d and gv_fetchfile occur. Whether compilation options
affect it I do not know. I can reproduce it in 5.6.2, 5.8.[123456]
(non-threaded) and 5.11.3 (both threaded and non-threaded), but not
5.8.[789] or 5.10.[01] (threaded).
  • Loading branch information
Father Chrysostomos committed Sep 23, 2010
1 parent a576304 commit 5a9a79a
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 3 deletions.
4 changes: 2 additions & 2 deletions gv.c
Expand Up @@ -121,9 +121,9 @@ Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen,
#else
sv_setpvn(GvSV(gv), name, namelen);
#endif
if (PERLDB_LINE || PERLDB_SAVESRC)
hv_magic(GvHVn(gv_AVadd(gv)), NULL, PERL_MAGIC_dbfile);
}
if ((PERLDB_LINE || PERLDB_SAVESRC) && !GvAV(gv))
hv_magic(GvHVn(gv_AVadd(gv)), NULL, PERL_MAGIC_dbfile);
if (tmpbuf != smallbuf)
Safefree(tmpbuf);
return gv;
Expand Down
7 changes: 7 additions & 0 deletions pod/perldelta.pod
Expand Up @@ -387,6 +387,13 @@ Parsing Perl code (either with string C<eval> or by loading modules) from
within a C<UNITCHECK> block no longer causes the interpreter to crash
L<[perl #70614]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=70614>.

=item *

When C<-d> is used on the shebang (C<#!>) line, the debugger now has access
to the lines of the main program. In the past, this sometimes worked and
sometimes did not, depending on what order things happened to be arranged
in memory.

=back

=head1 Known Problems
Expand Down
15 changes: 14 additions & 1 deletion t/run/switchd.t
Expand Up @@ -9,7 +9,7 @@ BEGIN { require "./test.pl"; }

# This test depends on t/lib/Devel/switchd.pm.

plan(tests => 2);
plan(tests => 3);

my $r;

Expand Down Expand Up @@ -44,3 +44,16 @@ __SWDTEST__
like($r, qr/^sub<Devel::switchd::import>;import<Devel::switchd a 42>;DB<main,$::tempfile_regexp,9>;sub<Foo::foo>;DB<Foo,$::tempfile_regexp,5>;DB<Foo,$::tempfile_regexp,6>;DB<Foo,$::tempfile_regexp,6>;sub<Bar::bar>;DB<Bar,$::tempfile_regexp,2>;sub<Bar::bar>;DB<Bar,$::tempfile_regexp,2>;sub<Bar::bar>;DB<Bar,$::tempfile_regexp,2>;$/);
}

# [perl #71806]
cmp_ok(
runperl( # less is useful for something :-)
switches => [ '"-Mless ++INC->{q-Devel/_.pm-}"' ],
progs => [
'#!perl -d:_',
'sub DB::DB{} print scalar @{q/_</.__FILE__}',
],
),
'>',
0,
'The debugger can see the lines of the main program under #!perl -d',
);

0 comments on commit 5a9a79a

Please sign in to comment.