Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

debugger completely breaks lvalue subs/xs functions #9821

Closed
p5pRT opened this issue Aug 8, 2009 · 4 comments
Closed

debugger completely breaks lvalue subs/xs functions #9821

p5pRT opened this issue Aug 8, 2009 · 4 comments

Comments

@p5pRT
Copy link

p5pRT commented Aug 8, 2009

Migrated from rt.perl.org#68328 (status was 'resolved')

Searchable as RT68328$

@p5pRT
Copy link
Author

p5pRT commented Aug 8, 2009

From perlbug@plan9.de

Created by perlbug@plan9.de

I found that JSON​::XS version 2.24 works differently under the debugger
then without it.

It turns out that this xs function failed to work​:

  SV *incr_text (JSON *self)
  ATTRS​: lvalue
  CODE​:
  ...
  RETVAL = self->incr_text ? SvREFCNT_inc (self->incr_text) : &PL_sv_undef;
  OUTPUT​:
  RETVAL

specifically, this perl statement had no effect​:

  $self->incr_text = "";

This only happened when running under the debugger (perl -d).

This works aorund the issue​:

  CvNODEBUG_on (get_cv ("JSON​::XS​::incr_text", 0)); /* otherwise calling scope can be the debugger */

(shameless feature request​: it would be nice if one could set lvalue and
nodebug on xs, I need this attribute on a lot of functions to work around
debugger bugs).

Apparently the debugger breaks lvalue subs. In fact, the effect is
reproducable easily from within perl​:

  $x = 5;
  sub k : lvalue { $x }
  k = 7;
  die $x;

This prints 5 under the debugger, and 7 without it.

Perl Info

Flags:
    category=library
    severity=low

Site configuration information for perl 5.10.0:

Configured by Marc Lehmann at Sat Feb 21 02:30:27 CET 2009.

Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  Platform:
    osname=linux, osvers=2.6.24-etchnhalf.1-amd64, archname=amd64-linux
    uname='linux cerebro 2.6.24-etchnhalf.1-amd64 #1 smp mon jul 21 10:36:02 utc 2008 x86_64 gnulinux '
    config_args='-Duselargefiles -Dxxxxuse64bitint -Uuse64bitall -Dusemymalloc=n -Dcc=gcc -Dccflags=-ggdb -gdwarf-2 -g3 -Dcppflags=-DPERL_ARENA_SIZE=16368 -D_GNU_SOURCE -I/opt/include -Doptimize=-O6 -msse2 -funroll-loops -fno-strict-aliasing -Dcccdlflags=-fPIC -Dldflags=-L/opt/perl/lib -L/opt/lib -Dlibs=-ldl -lm -lcrypt -Darchname=amd64-linux -Dprefix=/opt/perl -Dprivlib=/opt/perl/lib/perl5 -Darchlib=/opt/perl/lib/perl5 -Dvendorprefix=/opt/perl -Dvendorlib=/opt/perl/lib/perl5 -Dvendorarch=/opt/perl/lib/perl5 -Dsiteprefix=/opt/perl -Dsitelib=/opt/perl/lib/perl5 -Dsitearch=/opt/perl/lib/perl5 -Dsitebin=/opt/perl/bin -Dman1dir=/opt/perl/man/man1 -Dman3dir=/opt/perl/man/man3 -Dsiteman1dir=/opt/perl/man/man1 -Dsiteman3dir=/opt/perl/man/man3 -Dman1ext=1 -Dman3ext=3 -Dpager=/usr/bin/less -Uafs -Uusesfio -Uusenm -Uuseshrplib -Dd_dosuid -Dusethreads=undef -Duse5005threads=undef -Duseithreads=undef -Dusemultiplicity=undef -Demail=perl-binary@plan9.de -Dcf_email=perl-binary@plan9.de -Dcf_by=Marc Lehmann -Dlocincpth=/opt/perl/include /opt/include -Dmyhostname=localhost -Dmultiarch=undef -Dbin=/opt/perl/bin -Dxxxusedevel -DxxxDEBUGGING -Dxxxuse_debugging_perl -Dxxxuse_debugmalloc -des'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-ggdb -gdwarf-2 -g3 -fno-strict-aliasing -pipe -I/opt/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O6 -msse2 -funroll-loops -fno-strict-aliasing',
    cppflags='-DPERL_ARENA_SIZE=16368 -D_GNU_SOURCE -I/opt/include -ggdb -gdwarf-2 -g3 -fno-strict-aliasing -pipe -I/opt/include'
    ccversion='', gccversion='4.3.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='gcc', ldflags ='-L/opt/perl/lib -L/opt/lib -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib /lib64 /usr/lib64
    libs=-ldl -lm -lcrypt
    perllibs=-ldl -lm -lcrypt
    libc=/lib/libc-2.7.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version='2.7'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O6 -msse2 -funroll-loops -fno-strict-aliasing -L/opt/perl/lib -L/opt/lib -L/usr/local/lib'

Locally applied patches:
    http://public.activestate.com/cgi-bin/perlbrowse/p/34209
    http://public.activestate.com/cgi-bin/perlbrowse/p/34507
    http://www.gossamer-threads.com/lists/perl/porters/232549
    embed.fnc:Perl_vcroak NULLOK


@INC for perl 5.10.0:
    /root/src/sex
    /opt/perl/lib/perl5
    /opt/perl/lib/perl5
    /opt/perl/lib/perl5
    /opt/perl/lib/perl5
    /opt/perl/lib/perl5
    .


Environment for perl 5.10.0:
    HOME=/root
    LANG (unset)
    LANGUAGE (unset)
    LC_CTYPE=en_US.UTF-8
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/root/s2:/root/s:/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11/bin:/usr/games:/usr/local/bin:/usr/local/sbin:/root/pserv:.
    PERL5LIB=/root/src/sex
    PERL5_CPANPLUS_CONFIG=/root/.cpanplus/config
    PERLDB_OPTS=ornaments=0
    PERL_ANYEVENT_DBI_TESTS=1
    PERL_ANYEVENT_EDNS0=1
    PERL_ANYEVENT_NET_TESTS=1
    PERL_ANYEVENT_PROTOCOLS=ipv4,ipv6
    PERL_ANYEVENT_STRICT=1
    PERL_BADLANG (unset)
    PERL_UNICODE=0
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Aug 8, 2009

From p5p@perl.wizbit.be

Apparently the debugger breaks lvalue subs. In fact, the effect is
reproducable easily from within perl​:

$x = 5;
sub k : lvalue { $x }
k = 7;
die $x;

This prints 5 under the debugger, and 7 without it.

This should already be fixed in blead with commit​:

http​://perl5.git.perl.org/perl.git/commit/1ad62f649328dc563f7f21be3c384f5adf18af1d

[perl #48489] patch to fix perl bug #7013author bharanee rathna <unknown>
  Tue, 11 Dec 2007 15​:25​:21 +0000 (07​:25 -0800)
committer Steve Peters <steve@​fisharerojo.org>
  Fri, 14 Nov 2008 14​:29​:53 +0000 (14​:29 +0000)
commit 1ad62f6
tree 5c3d6b8a5c665965a82a67619c2a450a4ea89740 tree | snapshot
parent 6fd69bb commit | diff

[perl #48489] patch to fix perl bug #7013
From​: "bharanee rathna" (via RT) <perlbug-followup@​perl.org>
Message-ID​: <rt-3.6.HEAD-28750-1197415521-1978.48489-75-0@​perl.org>

Just the pp_hot.c portion of this patch applied along with removing
the TODO from the test added in the previous change.

p4raw-id​: //depot/perl@​34833

The RT ticket​:
http​://rt.perl.org/rt3//Ticket/Display.html?id=48489
#7013​: lvalue subs not working inside debugger

Best regards,

Bram

@p5pRT
Copy link
Author

p5pRT commented Aug 8, 2009

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Aug 8, 2009

p5p@spam.wizbit.be - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant