Skip Menu |
Report information
Id: 132715
Status: open
Priority: 0/
Queue: perl5

Owner: Nobody
Requestors: craigberry <craigberry [at] mac.com>
Cc:
AdminCc:

Operating System: (no value)
PatchStatus: (no value)
Severity: low
Type: unknown
Perl Version: (no value)
Fixed In: (no value)



From: "Craig A. Berry" <craigberry [...] mac.com>
Date: Fri, 12 Jan 2018 21:08:23 -0600
Subject: debugger examine broken
To: perlbug [...] perl.org
Download (untitled) / with headers
text/plain 4.2k
Something fairly recent as of v5.27.7-130-g4d7e83bba2 broke the "x" command in the debugger. From within t/ after a successful build: $ ./perl -d -I../lib io/fs.t Loading DB routines from perl5db.pl version 1.53 Editor support available. Enter h or 'h h' for help, or 'man perldebug' for more help. main::(io/fs.t:11): my $Is_VMSish = ($^O eq 'VMS'); DB<1> b 195 DB<2> c 1..61 ok 1 - umask ok 2 - link a b ok 3 - link b c ok 4 - link count of triply-linked file ok 5 - mode of triply-linked file ok 6 - chmod succeeding ok 7 - chmod going through ok 8 - chmod two files ok 9 - chmod going through to c ok 10 - chmod going through to x ok 11 - unlink two files ok 12 - ino of removed file b should be undef ok 13 - ino of removed file x should be undef ok 14 - open a ok 15 - fchmod main::(io/fs.t:195): is($mode & 0777, 0, "perm reset"); DB<2> x $mode Died at ../lib/perl5db.pl line 6390. at ../lib/perl5db.pl line 6390. DB::dumpit(GLOB(0x7fca31182bf0), ARRAY(0x7fca312ba2a0)) called at ../lib/perl5db.pl line 767 DB::eval called at ../lib/perl5db.pl line 3138 DB::DB called at io/fs.t line 195 # Looks like you planned 61 tests but ran 15. 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<3> $ ./perl -I../lib -V Summary of my perl5 (revision 5 version 27 subversion 8) configuration: Commit id: 4d7e83bba2968618bd9026ce17ae87f5529e5f38 Platform: osname=darwin osvers=17.3.0 archname=darwin-2level uname='darwin triamond.local 17.3.0 darwin kernel version 17.3.0: thu nov 9 18:09:22 pst 2017; root:xnu-4570.31.3~1release_x86_64 x86_64 ' config_args='-Dusedevel -des' hint=recommended useposix=true d_sigaction=define useithreads=undef usemultiplicity=undef use64bitint=define use64bitall=define uselongdouble=undef usemymalloc=n default_inc_excludes_dot=define bincompat5005=undef Compiler: cc='cc' ccflags ='-fno-common -DPERL_DARWIN -mmacosx-version-min=10.13 -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -I/opt/local/include -DPERL_USE_SAFE_PUTENV' optimize='-O3' cppflags='-fno-common -DPERL_DARWIN -mmacosx-version-min=10.13 -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -I/opt/local/include' ccversion='' gccversion='4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)' gccosandvers='' intsize=4 longsize=8 ptrsize=8 doublesize=8 byteorder=12345678 doublekind=3 d_longlong=define longlongsize=8 d_longdbl=define longdblsize=16 longdblkind=3 ivtype='long' ivsize=8 nvtype='double' nvsize=8 Off_t='off_t' lseeksize=8 alignbytes=8 prototype=define Linker and Libraries: ld='cc' ldflags =' -mmacosx-version-min=10.13 -fstack-protector-strong -L/usr/local/lib' libpth=/usr/local/lib /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.0.0/lib /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/lib /usr/lib libs=-lpthread -ldbm -ldl -lm -lutil -lc perllibs=-lpthread -ldl -lm -lutil -lc libc= so=dylib useshrplib=false libperl=libperl.a gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs dlext=bundle d_dlsymun=undef ccdlflags=' ' cccdlflags=' ' lddlflags=' -mmacosx-version-min=10.13 -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector-strong' Characteristics of this binary (from libperl): Compile-time options: HAS_TIMES PERLIO_LAYERS PERL_COPY_ON_WRITE PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP PERL_OP_PARENT PERL_PRESERVE_IVUV PERL_USE_DEVEL PERL_USE_SAFE_PUTENV USE_64_BIT_ALL USE_64_BIT_INT USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_LOCALE_TIME USE_PERLIO USE_PERL_ATOF Built under darwin Compiled at Jan 12 2018 17:47:17 @INC: ../lib /usr/local/lib/perl5/site_perl/5.27.8/darwin-2level /usr/local/lib/perl5/site_perl/5.27.8 /usr/local/lib/perl5/5.27.8/darwin-2level /usr/local/lib/perl5/5.27.8 /usr/local/lib/perl5/site_perl
CC: bugs-bitbucket [...] rt.perl.org
To: "Perl5 Porters (E-mail)" <perl5-porters [...] perl.org>
Subject: Re: [perl #132715] debugger examine broken
Date: Sat, 13 Jan 2018 12:18:25 -0600
From: "Craig A. Berry" <craig.a.berry [...] gmail.com>
Download (untitled) / with headers
text/plain 2.3k
On Fri, Jan 12, 2018 at 10:08 PM, Craig A.Berry <perlbug-followup@perl.org> wrote: Show quoted text
> # New Ticket Created by Craig A. Berry > # Please include the string: [perl #132715] > # in the subject line of all future correspondence about this issue. > # <URL: https://rt.perl.org/Ticket/Display.html?id=132715 >
Show quoted text
> Something fairly recent as of v5.27.7-130-g4d7e83bba2 broke the "x" command in the debugger. From within t/ after a successful build:
It's not actually that recent. I've reproduced it in v5.27.5. Show quoted text
> $ ./perl -d -I../lib io/fs.t > > Loading DB routines from perl5db.pl version 1.53 > Editor support available. > > Enter h or 'h h' for help, or 'man perldebug' for more help. > > main::(io/fs.t:11): my $Is_VMSish = ($^O eq 'VMS'); > DB<1> b 195 > DB<2> c > 1..61
<snip> Show quoted text
> main::(io/fs.t:195): is($mode & 0777, 0, "perm reset"); > DB<2> x $mode > Died at ../lib/perl5db.pl line 6390. > at ../lib/perl5db.pl line 6390. > DB::dumpit(GLOB(0x7fca31182bf0), ARRAY(0x7fca312ba2a0)) called at ../lib/perl5db.pl line 767 > DB::eval called at ../lib/perl5db.pl line 3138 > DB::DB called at io/fs.t line 195 > # Looks like you planned 61 tests but ran 15.
The code in perl5db.pl that looks like this is failing: # Load dumpvar.pl unless we've already got the sub we need from it. unless ( defined &main::dumpValue ) { do 'dumpvar.pl' or die $@; } The current working directory is t/<some temp directory> and @INC consists only of C<../lib>, so it can't find dumpvar.pl. An installed perl would likely not have this problem as the @INC entries would be absolute paths, but debugging test failures in a core build is a pretty key feature. I don't know why the debugger defers the loading of dumpvar.pl rather than just requiring it up top. Surely there would be few debug sessions that never dump a variable? One approach to fix this might be a self locator as was done for loc_tools.pl in: <https://perl5.git.perl.org/perl.git/commitdiff/9969000e1134387c0ed173e5d1b3f3b760a1d00c> However, that uses File::Spec, which perl5db.pl does not currently use, and there may be a reason for that. The debugger does use Cwd and saves the variable C<$_initial_cwd>, but knowing what directory we started in doesn't really help us unless we combine it with each entry in @INC (and only when those entries are relative).
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 4.1k
On Sat, 13 Jan 2018 18:18:37 GMT, craig.a.berry@gmail.com wrote: Show quoted text
> On Fri, Jan 12, 2018 at 10:08 PM, Craig A.Berry > <perlbug-followup@perl.org> wrote:
> > # New Ticket Created by Craig A. Berry > > # Please include the string: [perl #132715] > > # in the subject line of all future correspondence about this issue. > > # <URL: https://rt.perl.org/Ticket/Display.html?id=132715 >
>
> > Something fairly recent as of v5.27.7-130-g4d7e83bba2 broke the "x" > > command in the debugger. From within t/ after a successful build:
> > It's not actually that recent. I've reproduced it in v5.27.5. >
> > $ ./perl -d -I../lib io/fs.t > > > > Loading DB routines from perl5db.pl version 1.53 > > Editor support available. > > > > Enter h or 'h h' for help, or 'man perldebug' for more help. > > > > main::(io/fs.t:11): my $Is_VMSish = ($^O eq 'VMS'); > > DB<1> b 195 > > DB<2> c > > 1..61
> <snip>
> > main::(io/fs.t:195): is($mode & 0777, 0, "perm reset"); > > DB<2> x $mode > > Died at ../lib/perl5db.pl line 6390. > > at ../lib/perl5db.pl line 6390. > > DB::dumpit(GLOB(0x7fca31182bf0), ARRAY(0x7fca312ba2a0)) > > called at ../lib/perl5db.pl line 767 > > DB::eval called at ../lib/perl5db.pl line 3138 > > DB::DB called at io/fs.t line 195 > > # Looks like you planned 61 tests but ran 15.
>
I encountered this myself several weeks ago, but wrote it off as my own clumsiness in using the debugger. It's very old. I started to do git checkouts of tags and got as far back as this: ##### tag v5.15.0 $ git show --format=fuller | head -5 commit 00b4043708e2509400eff8f5e4cb870d388854d4 Author: David Golden <dagolden@cpan.org> AuthorDate: Mon Jun 20 19:07:28 2011 -0400 Commit: David Golden <dagolden@cpan.org> CommitDate: Mon Jun 20 19:07:28 2011 -0400 ##### [t] 522 $ ./perl -I../lib -d io/fs.t Loading DB routines from perl5db.pl version 1.34 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(io/fs.t:11): my $Is_VMSish = ($^O eq 'VMS'); DB<1> b 178 DB<2> c 1..51 ok 1 - umask ok 2 - link a b ok 3 - link b c ok 4 - link count of triply-linked file ok 5 - mode of triply-linked file ok 6 - chmod succeeding ok 7 - chmod going through ok 8 - chmod two files ok 9 - chmod going through to c ok 10 - chmod going through to x ok 11 - unlink two files ok 12 - ino of removed file b should be undef ok 13 - ino of removed file x should be undef ok 14 - open a ok 15 - fchmod main::(io/fs.t:178): skip "no mode checks", 1 if $skip_mode_checks; DB<2> x $mode Died at ../lib/perl5db.pl line 5619. at ../lib/perl5db.pl line 5619 DB::dumpit('GLOB(0x11d5ce0)', 'ARRAY(0x169f028)') called at ../lib/perl5db.pl line 675 DB::eval called at ../lib/perl5db.pl line 3442 DB::DB called at io/fs.t line 178 # Looks like you planned 51 tests but ran 15. 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. ##### Show quoted text
> The code in perl5db.pl that looks like this is failing: > > # Load dumpvar.pl unless we've already got the sub we need from it. > unless ( defined &main::dumpValue ) { > do 'dumpvar.pl' or die $@; > } > > The current working directory is t/<some temp directory> and @INC > consists only of C<../lib>, so it can't find dumpvar.pl. An installed > perl would likely not have this problem as the @INC entries would be > absolute paths, but debugging test failures in a core build is a > pretty key feature. > > I don't know why the debugger defers the loading of dumpvar.pl rather > than just requiring it up top. Surely there would be few debug > sessions that never dump a variable? > > One approach to fix this might be a self locator as was done for > loc_tools.pl in: > > <https://perl5.git.perl.org/perl.git/commitdiff/9969000e1134387c0ed173e5d1b3f3b760a1d00c> > > However, that uses File::Spec, which perl5db.pl does not currently > use, and there may be a reason for that. The debugger does use Cwd > and saves the variable C<$_initial_cwd>, but knowing what directory we > started in doesn't really help us unless we combine it with each entry > in @INC (and only when those entries are relative).
-- James E Keenan (jkeenan@cpan.org)


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org