
Richard.Foley at rfi
Nov 13, 2006, 3:16 AM
Post #3 of 16
(550 views)
Permalink
|
|
Re: [BUG] Perl Debugger Interface Resets the $main::{"_<$filename"} upon eval with a "#line $filename" directive
[In reply to]
|
|
On Sunday 12 November 2006 16:53, Rafael Garcia-Suarez wrote: > On 10/11/06, Shlomi Fish <shlomif [at] iglu> wrote: > > Run it under perl -d in perl-5.8.8 and press n a few times. As can be seen > > after a while the current line content display disappears. This is caused due > > to the fact that the eval with the "#line 5 Test2.pl" resets the file > > contents that are supplied to the debugger in @{$main::{'_<Test2.pl'}}: > > One can note that this bug doesn't happen with 5.8.7, so it is > relatively recent. > > Doesn't happen to me with perl-5.8.8, unless I'm doing something different or have misunderstood you, as you can see from the output below. perl -V included in case it is related to your/my installation...? -- Richard Foley Ciao - shorter than aufwiedersehen http://www.rfi.net/ richard [at] linux22:~> perl -d Test2.pl Loading DB routines from perl5db.pl version 1.28 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(Test2.pl:6): eval " DB<1> x @{$main::{'_<Test2.pl'}} 0 'BEGIN { require \'perl5db.pl\' }; ' 1 '#!/usr/bin/perl ' 2 ' ' 3 'use strict; ' 4 'use warnings; ' 5 ' ' 6 'eval " ' 7 '#line 5 Test2.pl ' 8 'print 6*2, \\"\\n\\"; ' 9 '"; ' 10 ' ' 11 'for my $i (1 .. 10) ' 12 '{ ' 13 ' print "$i\\n"; ' 14 '} ' 15 ' ' 16 'sub factorial ' 17 '{ ' 18 ' my $i = 0; ' 19 ' if ($i < 2) ' 20 ' { ' 21 ' return 1; ' 22 ' } ' 23 ' else ' 24 ' { ' 25 ' return $i*factorial($i-1); ' 26 ' } ' 27 '} ' 28 ' ' 29 'for my $num (1 .. 10) ' 30 '{ ' 31 ' print $num, ": ", factorial($num), "\\n"; ' 32 '} ' 33 ' ' DB<2> n main::(Test2.pl:5): DB<2> n 12 main::(Test2.pl:11): for my $i (1 .. 10) main::(Test2.pl:12): { DB<2> n main::(Test2.pl:13): print "$i\n"; DB<2> x @{$main::{'_<Test2.pl'}} 0 'BEGIN { require \'perl5db.pl\' }; ' 1 '#!/usr/bin/perl ' 2 ' ' 3 'use strict; ' 4 'use warnings; ' 5 ' ' 6 'eval " ' 7 '#line 5 Test2.pl ' 8 'print 6*2, \\"\\n\\"; ' 9 '"; ' 10 ' ' 11 'for my $i (1 .. 10) ' 12 '{ ' 13 ' print "$i\\n"; ' 14 '} ' 15 ' ' 16 'sub factorial ' 17 '{ ' 18 ' my $i = 0; ' 19 ' if ($i < 2) ' 20 ' { ' 21 ' return 1; ' 22 ' } ' 23 ' else ' 24 ' { ' 25 ' return $i*factorial($i-1); ' 26 ' } ' 27 '} ' 28 ' ' 29 'for my $num (1 .. 10) ' 30 '{ ' 31 ' print $num, ": ", factorial($num), "\\n"; ' 32 '} ' 33 ' ' DB<3> n 1 main::(Test2.pl:13): print "$i\n"; DB<3> n 2 main::(Test2.pl:13): print "$i\n"; DB<3> n 3 main::(Test2.pl:13): print "$i\n"; DB<3> x @{$main::{'_<Test2.pl'}} 0 'BEGIN { require \'perl5db.pl\' }; ' 1 '#!/usr/bin/perl ' 2 ' ' 3 'use strict; ' 4 'use warnings; ' 5 ' ' 6 'eval " ' 7 '#line 5 Test2.pl ' 8 'print 6*2, \\"\\n\\"; ' 9 '"; ' 10 ' ' 11 'for my $i (1 .. 10) ' 12 '{ ' 13 ' print "$i\\n"; ' 14 '} ' 15 ' ' 16 'sub factorial ' 17 '{ ' 18 ' my $i = 0; ' 19 ' if ($i < 2) ' 20 ' { ' 21 ' return 1; ' 22 ' } ' 23 ' else ' 24 ' { ' 25 ' return $i*factorial($i-1); ' 26 ' } ' 27 '} ' 28 ' ' 29 'for my $num (1 .. 10) ' 30 '{ ' 31 ' print $num, ": ", factorial($num), "\\n"; ' 32 '} ' 33 ' ' DB<4> n 4 main::(Test2.pl:13): print "$i\n"; DB<4> n 5 main::(Test2.pl:13): print "$i\n"; DB<4> n 6 main::(Test2.pl:13): print "$i\n"; DB<4> x @{$main::{'_<Test2.pl'}} 0 'BEGIN { require \'perl5db.pl\' }; ' 1 '#!/usr/bin/perl ' 2 ' ' 3 'use strict; ' 4 'use warnings; ' 5 ' ' 6 'eval " ' 7 '#line 5 Test2.pl ' 8 'print 6*2, \\"\\n\\"; ' 9 '"; ' 10 ' ' 11 'for my $i (1 .. 10) ' 12 '{ ' 13 ' print "$i\\n"; ' 14 '} ' 15 ' ' 16 'sub factorial ' 17 '{ ' 18 ' my $i = 0; ' 19 ' if ($i < 2) ' 20 ' { ' 21 ' return 1; ' 22 ' } ' 23 ' else ' 24 ' { ' 25 ' return $i*factorial($i-1); ' 26 ' } ' 27 '} ' 28 ' ' 29 'for my $num (1 .. 10) ' 30 '{ ' 31 ' print $num, ": ", factorial($num), "\\n"; ' 32 '} ' 33 ' ' DB<5> n 7 main::(Test2.pl:13): print "$i\n"; DB<5> n 8 main::(Test2.pl:13): print "$i\n"; DB<5> n 9 main::(Test2.pl:13): print "$i\n"; DB<5> x @{$main::{'_<Test2.pl'}} 0 'BEGIN { require \'perl5db.pl\' }; ' 1 '#!/usr/bin/perl ' 2 ' ' 3 'use strict; ' 4 'use warnings; ' 5 ' ' 6 'eval " ' 7 '#line 5 Test2.pl ' 8 'print 6*2, \\"\\n\\"; ' 9 '"; ' 10 ' ' 11 'for my $i (1 .. 10) ' 12 '{ ' 13 ' print "$i\\n"; ' 14 '} ' 15 ' ' 16 'sub factorial ' 17 '{ ' 18 ' my $i = 0; ' 19 ' if ($i < 2) ' 20 ' { ' 21 ' return 1; ' 22 ' } ' 23 ' else ' 24 ' { ' 25 ' return $i*factorial($i-1); ' 26 ' } ' 27 '} ' 28 ' ' 29 'for my $num (1 .. 10) ' 30 '{ ' 31 ' print $num, ": ", factorial($num), "\\n"; ' 32 '} ' 33 ' ' DB<6> n 10 main::(Test2.pl:29): for my $num (1 .. 10) main::(Test2.pl:30): { DB<6> n main::(Test2.pl:31): print $num, ": ", factorial($num), "\n"; DB<6> n 1: 1 main::(Test2.pl:31): print $num, ": ", factorial($num), "\n"; DB<6> x @{$main::{'_<Test2.pl'}} 0 'BEGIN { require \'perl5db.pl\' }; ' 1 '#!/usr/bin/perl ' 2 ' ' 3 'use strict; ' 4 'use warnings; ' 5 ' ' 6 'eval " ' 7 '#line 5 Test2.pl ' 8 'print 6*2, \\"\\n\\"; ' 9 '"; ' 10 ' ' 11 'for my $i (1 .. 10) ' 12 '{ ' 13 ' print "$i\\n"; ' 14 '} ' 15 ' ' 16 'sub factorial ' 17 '{ ' 18 ' my $i = 0; ' 19 ' if ($i < 2) ' 20 ' { ' 21 ' return 1; ' 22 ' } ' 23 ' else ' 24 ' { ' 25 ' return $i*factorial($i-1); ' 26 ' } ' 27 '} ' 28 ' ' 29 'for my $num (1 .. 10) ' 30 '{ ' 31 ' print $num, ": ", factorial($num), "\\n"; ' 32 '} ' 33 ' ' DB<7> n 2: 1 main::(Test2.pl:31): print $num, ": ", factorial($num), "\n"; DB<7> n 3: 1 main::(Test2.pl:31): print $num, ": ", factorial($num), "\n"; DB<7> n 4: 1 main::(Test2.pl:31): print $num, ": ", factorial($num), "\n"; DB<7> x @{$main::{'_<Test2.pl'}} 0 'BEGIN { require \'perl5db.pl\' }; ' 1 '#!/usr/bin/perl ' 2 ' ' 3 'use strict; ' 4 'use warnings; ' 5 ' ' 6 'eval " ' 7 '#line 5 Test2.pl ' 8 'print 6*2, \\"\\n\\"; ' 9 '"; ' 10 ' ' 11 'for my $i (1 .. 10) ' 12 '{ ' 13 ' print "$i\\n"; ' 14 '} ' 15 ' ' 16 'sub factorial ' 17 '{ ' 18 ' my $i = 0; ' 19 ' if ($i < 2) ' 20 ' { ' 21 ' return 1; ' 22 ' } ' 23 ' else ' 24 ' { ' 25 ' return $i*factorial($i-1); ' 26 ' } ' 27 '} ' 28 ' ' 29 'for my $num (1 .. 10) ' 30 '{ ' 31 ' print $num, ": ", factorial($num), "\\n"; ' 32 '} ' 33 ' ' DB<8> n 5: 1 main::(Test2.pl:31): print $num, ": ", factorial($num), "\n"; DB<8> n 6: 1 main::(Test2.pl:31): print $num, ": ", factorial($num), "\n"; DB<8> n 7: 1 main::(Test2.pl:31): print $num, ": ", factorial($num), "\n"; DB<8> x @{$main::{'_<Test2.pl'}} 0 'BEGIN { require \'perl5db.pl\' }; ' 1 '#!/usr/bin/perl ' 2 ' ' 3 'use strict; ' 4 'use warnings; ' 5 ' ' 6 'eval " ' 7 '#line 5 Test2.pl ' 8 'print 6*2, \\"\\n\\"; ' 9 '"; ' 10 ' ' 11 'for my $i (1 .. 10) ' 12 '{ ' 13 ' print "$i\\n"; ' 14 '} ' 15 ' ' 16 'sub factorial ' 17 '{ ' 18 ' my $i = 0; ' 19 ' if ($i < 2) ' 20 ' { ' 21 ' return 1; ' 22 ' } ' 23 ' else ' 24 ' { ' 25 ' return $i*factorial($i-1); ' 26 ' } ' 27 '} ' 28 ' ' 29 'for my $num (1 .. 10) ' 30 '{ ' 31 ' print $num, ": ", factorial($num), "\\n"; ' 32 '} ' 33 ' ' DB<9> n 8: 1 main::(Test2.pl:31): print $num, ": ", factorial($num), "\n"; DB<9> n 9: 1 main::(Test2.pl:31): print $num, ": ", factorial($num), "\n"; DB<9> n 10: 1 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<9> x @{$main::{'_<Test2.pl'}} 0 'BEGIN { require \'perl5db.pl\' }; ' 1 '#!/usr/bin/perl ' 2 ' ' 3 'use strict; ' 4 'use warnings; ' 5 ' ' 6 'eval " ' 7 '#line 5 Test2.pl ' 8 'print 6*2, \\"\\n\\"; ' 9 '"; ' 10 ' ' 11 'for my $i (1 .. 10) ' 12 '{ ' 13 ' print "$i\\n"; ' 14 '} ' 15 ' ' 16 'sub factorial ' 17 '{ ' 18 ' my $i = 0; ' 19 ' if ($i < 2) ' 20 ' { ' 21 ' return 1; ' 22 ' } ' 23 ' else ' 24 ' { ' 25 ' return $i*factorial($i-1); ' 26 ' } ' 27 '} ' 28 ' ' 29 'for my $num (1 .. 10) ' 30 '{ ' 31 ' print $num, ": ", factorial($num), "\\n"; ' 32 '} ' 33 ' ' DB<10> . main::(Test2.pl:31): print $num, ": ", factorial($num), "\n"; DB<10> n Use `q' to quit or `R' to restart. `h q' for details. DB<10> q richard [at] linux22:~> richard [at] linux22:~> perl -V Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=linux, osvers=2.6.13-15-smp, archname=i686-linux-thread-multi uname='linux linux225 2.6.13-15-smp #1 smp tue sep 13 14:56:15 utc 2005 i686 i686 i386 gnulinux ' config_args='-des -Dotherlibdirs=/usr/lib/perl5/5.8.7:/usr/lib/perl5/5.8.7/i586-linux-thread-multi:/usr/lib/perl5/site_perl:/usr/lib/perl5/site_perl/5.8.7:/usr/lib/perl5/site_perl/5.8.7/i586-linux-thread-multi:/usr/lib/perl5/vendor_perl:/usr/lib/perl5/vendor_perl/5.8.7:/usr/lib/perl5/vendor_perl/5.8.7/i586-linux-thread-multi -Dinstallusrbinperl -Dusethreads' hint=recommended, useposix=true, d_sigaction=define usethreads=define use5005threads=undef useithreads=define usemultiplicity=define useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2', cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include' ccversion='', gccversion='4.0.2 20050901 (prerelease) (SUSE Linux)', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc libc=/lib/libc-2.3.5.so, so=so, useshrplib=false, libperl=libperl.a gnulibc_version='2.3.5' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API Built under linux Compiled at Oct 20 2006 15:27:16 @INC: /usr/local/lib/perl5/5.8.8/i686-linux-thread-multi /usr/local/lib/perl5/5.8.8 /usr/local/lib/perl5/site_perl/5.8.8/i686-linux-thread-multi /usr/local/lib/perl5/site_perl/5.8.8 /usr/local/lib/perl5/site_perl /usr/lib/perl5/5.8.7 /usr/lib/perl5/5.8.7/i586-linux-thread-multi /usr/lib/perl5/site_perl /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.7/i586-linux-thread-multi /usr/lib/perl5/vendor_perl /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.7/i586-linux-thread-multi
|