Shlomif, y u break perl?


-------- Original Message --------
Subject: [perl #118169] subroutine arguments are no longer shown in perl debugger ( x @_ in perl -d)
Date: Sun, 26 May 2013 01:29:38 -0700
From: Father Chrysostomos via RT <perlbug-follo...@perl.org>
Reply-To: perlbug-follo...@perl.org
To: dotandi...@gmail.com


On Sat May 25 17:33:45 2013, jkeenan wrote:
> On Fri May 24 22:24:07 2013, dotandi...@gmail.com wrote:
> > 
> > 
> > This is a bug report for perl from do...@corky.net,
> > generated with the help of perlbug 1.39 running under perl 5.18.0.
> > 
> > 
> > -----------------------------------------------------------------
> > In perl 5.18.0, @_ isn't visible in the debugger (perl -d).
> > You can't inspect it with x (eval/dump) or w (watch).
> > 
> > Example:
> > perl -dE 'sub f { say $_ for (@_); $a = $_[1]; say $a;}; f(4,25,7);'
> >    DB<1> s
> >    ...
> >    DB<1> x @_
> >    empty array
> > 
> > -----------------------------------------------------------------
> > ---
> > Flags:
> >      category=core
> >      severity=high
> > ---
> > Site configuration information for perl 5.18.0:
> > 
> > Configured by dotandimet at Mon May 20 22:37:44 IDT 2013.
> > 
> > Summary of my perl5 (revision 5 version 18 subversion 0)
> > configuration:
> > 
> 
> This does seem to be a regression from 5.16.0:
> 
> #####
> $ /usr/local/bin/perl5.16.0 -d 118169-debug.pl 
> 
> Loading DB routines from perl5db.pl version 1.37
> Editor support available.
> 
> Enter h or 'h h' for help, or 'man perldebug' for more help.
> 
> main::(118169-debug.pl:4):      use Data::Dumper;$Data::Dumper::Indent=1;
>   DB<1> n
> main::(118169-debug.pl:7):      f(4,25,7);
>   DB<1> s
> main::f(118169-debug.pl:10):        say $_ for (@_);
>   DB<1> x @_
> 0  4
> 1  25
> 2  7
> #####

It was caused by:

commit 7c54f46a95be02b1ca921f4d4521122267d801cd
Author: Shlomi Fish <shlo...@shlomifish.org>
Date:   Mon Oct 1 20:40:13 2012 +0200

    perl5db: no longer passing arguments to DB::eval().
    
    It didn't accept any arguments anyway.

diff --git a/lib/perl5db.pl b/lib/perl5db.pl
index 54de27a..87713a5 100644
--- a/lib/perl5db.pl
+++ b/lib/perl5db.pl
@@ -741,7 +741,7 @@ sub eval {
     # Since we're only saving $@, we only have to localize the array
element
     # that it will be stored in.
     local $saved[0];    # Preserve the old value of $@
-    eval { &DB::save };
+    eval { DB::save() };
 
     # Now see whether we need to report an error back to the user.
     if ($at) {
@@ -1929,7 +1929,7 @@ If there are any preprompt actions, execute those
as well.
 =cut
 
     # If there's an action, do it now.
-    $evalarg = $action, DB::eval(@_) if $action;
+    $evalarg = $action, DB::eval() if $action;
 
     # Are we nested another level (e.g., did we evaluate a function
     # that had a breakpoint in it at the debugger prompt)?
@@ -1940,7 +1940,7 @@ If there are any preprompt actions, execute those
as well.
 
         # Do any pre-prompt actions.
         foreach $evalarg (@$pre) {
-            DB::eval(@_);
+            DB::eval();
         }
 
         # Complain about too much recursion if we passed the limit.
@@ -3273,7 +3273,7 @@ any variables we might want to address in the
C<DB> package.
             $evalarg = "\$^D = \$^D | \$DB::db_stop;\n$cmd";
 
             # Run *our* eval that executes in the caller's context.
-            DB::eval(@_);
+            DB::eval();
 
             # Turn off the one-time-dump stuff now.
             if ($onetimeDump) {
@@ -3374,7 +3374,7 @@ again.
 
         # Evaluate post-prompt commands.
         foreach $evalarg (@$post) {
-            DB::eval(@_);
+            DB::eval();
         }
     }    # if ($single || $signal)
 
@@ -3477,7 +3477,7 @@ sub _DB__handle_watch_expressions
 
             # Fix context DB::eval() wants to return an array, but
             # we need a scalar here.
-            my ($val) = join( "', '", DB::eval(@_) );
+            my ($val) = join( "', '", DB::eval() );
             $val = ( ( defined $val ) ? "'$val'" : 'undef' );
 
             # Did it change?
@@ -5075,7 +5075,7 @@ sub cmd_i {
     my $line = shift;
     foreach my $isa ( split( /\s+/, $line ) ) {
         $evalarg = $isa;
-        ($isa) = DB::eval(@_);
+        ($isa) = DB::eval();
         no strict 'refs';
         print join(
             ', ',
@@ -5120,7 +5120,7 @@ sub cmd_l {
         # Set up for DB::eval() - evaluate in *user* context.
         $evalarg = $1;
         # $evalarg = $2;
-        my ($s) = DB::eval(@_);
+        my ($s) = DB::eval();
 
         # Ooops. Bad scalar.
         if ($@) {
@@ -5523,7 +5523,7 @@ sub _add_watch_expr {
     # in the user's context. This version can handle expressions which
     # return a list value.
     $evalarg = $expr;
-    my ($val) = join( ' ', DB::eval(@_) );
+    my ($val) = join( ' ', DB::eval() );
     $val = ( defined $val ) ? "'$val'" : 'undef';
 
     # Save the current value of the _expression_.
@@ -9744,7 +9744,7 @@ sub cmd_pre580_W {
         # Get the current value of the _expression_.
         # Doesn't handle expressions returning list values!
         $evalarg = $1;
-        my ($val) = DB::eval(@_);
+        my ($val) = DB::eval();
         $val = ( defined $val ) ? "'$val'" : 'undef';
 
         # Save it.


-- 

Father Chrysostomos




--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
_______________________________________________
Perl mailing list
Perl@perl.org.il
http://mail.perl.org.il/mailman/listinfo/perl

Reply via email to