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

Owner: Nobody
Requestors: jkahrman [at] mathworks.com
Cc:
AdminCc:

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



Subject: [PATCH] debugger prints '1' when an reference or object is thrown
From: <jkahrman [...] mathworks.com>
To: <perlbug [...] perl.org>
Date: Tue, 31 Oct 2017 18:29:17 -0400
This is a bug report for perl from jkahrman@mathworks.com, generated with the help of perlbug 1.40 running under perl 5.20.2. If an exception object is thrown while stepping through the debugger, the debugger prints '1 at perl5db.pl line 8616' instead of stringifing the object and reporting the correct line number the exception was thrown (See attachment exception_bug). The same behavior can be demonstrated more simply with unblessed references: ------------------------------- % perl -e 'die({});' || echo HASH(0xc93e78) % perl -de 'die({});' || echo Loading DB routines from perl5db.pl version 1.44 Editor support available. Enter h or 'h h' for help, or 'man perldebug' for more help. main::(-e:1): die({}); DB<1> c 1 at /usr/share/perl/5.20/perl5db.pl line 8616. 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<1> q ------------------------------- This behavior is because perl5db.pl is calling Carp::longmess in scalar context instead of list context. When the first argument of Carp::longmess (or shortmess) is a reference, it returns it's argument list (@_) unmodified. I've attached a patch (debug_exception_1.patch) that calls Carp::longmess in list context to provide more useful messages. --- Flags: category=core severity=low Type=Patch PatchStatus=HasPatch --- Site configuration information for perl 5.20.2: Configured by Debian Project at Mon Jan 11 23:24:04 UTC 2016. Summary of my perl5 (revision 5 version 20 subversion 2) configuration: Platform: osname=linux, osvers=3.16.0-4-amd64, archname=x86_64-linux-gnu-thread-multi uname='linux themisto 3.16.0-4-amd64 #1 smp debian 3.16.7-ckt20-1+deb8u1 (2015-12-14) x86_64 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Dldflags= -Wl,-z,relro -Dlddlflags=-shared -Wl,-z,relro -Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.20 -Darchlib=/usr/lib/x86_64-linux-gnu/perl/5.20 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/x86_64-linux-gnu/perl5/5.20 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.20.2 -Dsitearch=/usr/local/lib/x86_64-linux-gnu/perl/5.20.2 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Ui_libutil -Uversiononly -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.20.2 -des' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define use64bitint=define, use64bitall=define, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2 -g', cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv -fno-strict-aliasing -pipe -I/usr/local/include' ccversion='', gccversion='4.9.2', gccosandvers='' intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16 ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='cc', ldflags =' -fstack-protector -L/usr/local/lib' libpth=/usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=libc-2.19.so, so=so, useshrplib=true, libperl=libperl.so.5.20 gnulibc_version='2.19' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib -fstack-protector' Locally applied patches: DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALLDIRS default for modules installed from CPAN. DEBPKG:debian/db_file_ver - http://bugs.debian.org/340047 Remove overly restrictive DB_File version check. DEBPKG:debian/doc_info - Replace generic man(1) instructions with Debian-specific information. DEBPKG:debian/enc2xs_inc - http://bugs.debian.org/290336 Tweak enc2xs to follow symlinks and ignore missing @INC directories. DEBPKG:debian/errno_ver - http://bugs.debian.org/343351 Remove Errno version check due to upgrade problems with long-running processes. DEBPKG:debian/libperl_embed_doc - http://bugs.debian.org/186778 Note that libperl-dev package is required for embedded linking DEBPKG:fixes/respect_umask - Respect umask during installation DEBPKG:debian/writable_site_dirs - Set umask approproately for site install directories DEBPKG:debian/extutils_set_libperl_path - EU:MM: set location of libperl.a under /usr/lib DEBPKG:debian/no_packlist_perllocal - Don't install .packlist or perllocal.pod for perl or vendor DEBPKG:debian/prefix_changes - Fiddle with *PREFIX and variables written to the makefile DEBPKG:debian/fakeroot - Postpone LD_LIBRARY_PATH evaluation to the binary targets. DEBPKG:debian/instmodsh_doc - Debian policy doesn't install .packlist files for core or vendor. DEBPKG:debian/ld_run_path - Remove standard libs from LD_RUN_PATH as per Debian policy. DEBPKG:debian/libnet_config_path - Set location of libnet.cfg to /etc/perl/Net as /usr may not be writable. DEBPKG:debian/mod_paths - Tweak @INC ordering for Debian DEBPKG:debian/module_build_man_extensions - http://bugs.debian.org/479460 Adjust Module::Build manual page extensions for the Debian Perl policy DEBPKG:debian/prune_libs - http://bugs.debian.org/128355 Prune the list of libraries wanted to what we actually need. DEBPKG:fixes/net_smtp_docs - [rt.cpan.org #36038] http://bugs.debian.org/100195 Document the Net::SMTP 'Port' option DEBPKG:debian/perlivp - http://bugs.debian.org/510895 Make perlivp skip include directories in /usr/local DEBPKG:debian/deprecate-with-apt - http://bugs.debian.org/747628 Point users to Debian packages of deprecated core modules DEBPKG:debian/squelch-locale-warnings - http://bugs.debian.org/508764 Squelch locale warnings in Debian package maintainer scripts DEBPKG:debian/skip-upstream-git-tests - Skip tests specific to the upstream Git repository DEBPKG:debian/patchlevel - http://bugs.debian.org/567489 List packaged patches for 5.20.2-3+deb8u3 in patchlevel.h DEBPKG:debian/skip-kfreebsd-crash - http://bugs.debian.org/628493 [perl #96272] Skip a crashing test case in t/op/threads.t on GNU/kFreeBSD DEBPKG:fixes/document_makemaker_ccflags - http://bugs.debian.org/628522 [rt.cpan.org #68613] Document that CCFLAGS should include $Config{ccflags} DEBPKG:debian/find_html2text - http://bugs.debian.org/640479 Configure CPAN::Distribution with correct name of html2text DEBPKG:debian/perl5db-x-terminal-emulator.patch - http://bugs.debian.org/668490 Invoke x-terminal-emulator rather than xterm in perl5db.pl DEBPKG:debian/cpan-missing-site-dirs - http://bugs.debian.org/688842 Fix CPAN::FirstTime defaults with nonexisting site dirs if a parent is writable DEBPKG:fixes/memoize_storable_nstore - [rt.cpan.org #77790] http://bugs.debian.org/587650 Memoize::Storable: respect 'nstore' option not respected DEBPKG:debian/regen-skip - Skip a regeneration check in unrelated git repositories DEBPKG:fixes/regcomp-mips-optim - [perl #122817] http://bugs.debian.org/754054 Downgrade the optimization of regcomp.c on mips and mipsel due to a gcc-4.9 bug DEBPKG:debian/makemaker-pasthru - http://bugs.debian.org/758471 Pass LD settings through to subdirectories DEBPKG:fixes/perldoc-less-R - [rt.cpan.org #98636] http://bugs.debian.org/758689 Tell the 'less' pager to allow terminal escape sequences DEBPKG:fixes/pod_man_reproducible_date - http://bugs.debian.org/759405 Support POD_MAN_DATE in Pod::Man for the left-hand footer DEBPKG:fixes/io_uncompress_gunzip_inmemory - http://bugs.debian.org/747363 [rt.cpan.org #95494] Fix gunzip to in-memory file handle DEBPKG:fixes/socket_test_recv_fix - http://bugs.debian.org/758718 [perl #122657] Compare recv return value to peername in socket test DEBPKG:fixes/hurd_socket_recv_todo - http://bugs.debian.org/758718 [perl #122657] TODO checking the result of recv() on hurd DEBPKG:fixes/regexp-performance - [0fa70a0] http://bugs.debian.org/777556 [perl #123743] simpify and speed up /.*.../ handling DEBPKG:fixes/failed_require_diagnostics - http://bugs.debian.org/781120 [perl #123270] Report inaccesible file on failed require DEBPKG:fixes/array-cloning - http://bugs.debian.org/779357 [perl #124127] [902d169] fix cloning arrays with unused elements DEBPKG:fixes/perldb-threads - http://bugs.debian.org/779357 [perl #124127] [41ef2c6] lib/perl5db.pl: Restore noop lock prototype DEBPKG:fixes/CVE-2015-8607_file_spec_taint_fix - ensure File::Spec::canonpath() preserves taint DEBPKG:fixes/encode-unicode-bom - http://bugs.debian.org/798727 [rt.cpan.org #107043] Address https://rt.cpan.org/Public/Bug/Display.html?id=107043 DEBPKG:debian/encode-unicode-bom-doc - http://bugs.debian.org/798727 Document Debian backport of Encode::Unicode fix --- @INC for perl 5.20.2: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.20.2 /usr/local/share/perl/5.20.2 /usr/lib/x86_64-linux-gnu/perl5/5.20 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.20 /usr/share/perl/5.20 /usr/local/lib/site_perl . --- Environment for perl 5.20.2: HOME=/home/jkahrman LANG=en_US.utf8 LANGUAGE (unset) LD_LIBRARY_PATH= LOGDIR (unset) PATH=/mathworks/devel/sandbox/jkahrman/svn/1.5.1/bin:/usr/local/bin:/usr/bin:/bin:/sbin:/usr/local/netbin:/hub/bat/share/bin:/hub/share/bin:/hub/bat/share/p5 PERL_BADLANG (unset) SHELL=/usr/local/bin/tcsh
Download exception_bug
text/x-patch 554b

Message body is not shown because sender requested not to inline it.

Message body is not shown because sender requested not to inline it.

RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 3.4k
On Wed, 01 Nov 2017 01:03:53 GMT, jkahrman@mathworks.com wrote: Show quoted text
> This is a bug report for perl from jkahrman@mathworks.com, > generated with the help of perlbug 1.40 running under perl 5.20.2. > > If an exception object is thrown while stepping through the debugger, > the > debugger prints '1 at perl5db.pl line 8616' instead of stringifing the > object > and reporting the correct line number the exception was thrown (See > attachment > exception_bug). > > The same behavior can be demonstrated more simply with unblessed > references: > ------------------------------- > % perl -e 'die({});' || echo > HASH(0xc93e78) > > % perl -de 'die({});' || echo > > Loading DB routines from perl5db.pl version 1.44 > Editor support available. > > Enter h or 'h h' for help, or 'man perldebug' for more help. > > main::(-e:1): die({}); > DB<1> c > 1 at /usr/share/perl/5.20/perl5db.pl line 8616. > 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<1> q > ------------------------------- >
I can reproduce this behavior in perl-5.20 and -5.22 -- but it appears to have been fixed in -5.24. 5.20 ##### [perl] 581 $ perl -v | head -2 | tail -1 This is perl 5, version 20, subversion 3 (v5.20.3) built for x86_64-linux [perl] 582 $ perl -e 'die({});' || echo HASH(0x273c148) [perl] 583 $ perl -de 'die({});' || echo Loading DB routines from perl5db.pl version 1.44_01 Editor support available. Enter h or 'h h' for help, or 'man perldebug' for more help. main::(-e:1): die({}); DB<1> c 1 at /home/jkeenan/perl5/perlbrew/perls/perl-5.20.3/lib/5.20.3/perl5db.pl line 8616. 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<1> q ##### 5.22 ##### [perl] 586 $ perl -v | head -2 | tail -1 This is perl 5, version 22, subversion 3 (v5.22.3) built for x86_64-linux [perl] 587 $ perl -e 'die({});' || echo HASH(0x140d160) [perl] 588 $ perl -de 'die({});' || echo Loading DB routines from perl5db.pl version 1.49_001 Editor support available. Enter h or 'h h' for help, or 'man perldebug' for more help. main::(-e:1): die({}); DB<1> c 1 at /home/jkeenan/perl5/perlbrew/perls/perl-5.22.3/lib/5.22.3/perl5db.pl line 8674. 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<1> q ##### 5.24 ##### [perl] 590 $ perl -v | head -2 | tail -1 This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linux [perl] 591 $ perl -e 'die({});' || echo HASH(0x19e9178) [perl] 592 $ perl -de 'die({});' || echo Loading DB routines from perl5db.pl version 1.49_05 Editor support available. Enter h or 'h h' for help, or 'man perldebug' for more help. main::(-e:1): die({}); DB<1> c HASH(0x17483a0)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<1> q ##### Show quoted text
> This behavior is because perl5db.pl is calling Carp::longmess in > scalar context > instead of list context. When the first argument of Carp::longmess (or > shortmess) is a reference, it returns it's argument list (@_) > unmodified. > > I've attached a patch (debug_exception_1.patch) that calls > Carp::longmess in > list context to provide more useful messages.
Thank you very much. -- James E Keenan (jkeenan@cpan.org)
To: "perlbug-followup" <perlbug-followup [...] perl.org>
From: Smylers <smylers [...] stripey.com>
CC: <perl5-porters [...] perl.org>
Date: Mon, 06 Nov 2017 16:08:17 +0000
Subject: Re: [perl #132383] [PATCH] debugger prints '1' when an reference or object is thrown
Download (untitled) / with headers
text/plain 567b
James E Keenan via RT writes: Show quoted text
> On Wed, 01 Nov 2017 01:03:53 GMT, jkahrman@mathworks.com wrote: >
> > If an exception object is thrown while stepping through the > > debugger, the debugger prints '1 at perl5db.pl line 8616'
> > I can reproduce this behavior in perl-5.20 and -5.22 -- but it appears > to have been fixed in -5.24.
Fixed by 6ca94a7e, which changes Carp (specifically changing what longmess can return in scalar context), making the debugger's use of longmess work. That became Carp 1.39. The most recent standalone Carp on Cpan is 1.38. Smylers


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