Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re: Using the perl debugger

by ww (Archbishop)
on Mar 15, 2009 at 11:24 UTC ( [id://750713]=note: print w/replies, xml ) Need Help??


in reply to Using the perl debugger

Clumsy, but use {{ at the debugger prompt before the line(s) you want to "skip over."

Line 25 below, set the "pre-debugger" command to an octothorpe, effectively turning the line in the next debugger step into a comment. You can see the effect at 29.

Line 35 is one way of showing yourself what "pre-debugger" commands are in effect; Line 43 clears all "pre-debugger" commands.

#!/usr/bin/perl use strict; use warnings; my @i = (2..5); for my $i (@i) { $i ++; print "foo"; print " $i\n"; } =head running under debug: >perl -d pl_test\test{{.pl Loading DB routines from perl5db.pl version 1.28 Editor support available. Enter h or `h h' for help, or `perldoc perldebug' for more help. main::(pl_test\test{{.pl:5): 5: my @i = (2..5); DB<1> {{ # DB<2> s main::(pl_test\test{{.pl:7): 7: for my $i (@i) { auto(-1) DB<2> # DB<2> s ... DB<2> {{ pre-debugger commands: {{ -- # DB<3> s foomain::(pl_test\test{{.pl:10): 10: print " $i\n"; auto(-1) DB<3> # DB<3> { * All { actions cleared. DB<4> ... continue normally =cut

Update: bolded the first {{ in the narrative.

Replies are listed 'Best First'.
Re^2: Using the perl debugger
by almut (Canon) on Mar 15, 2009 at 12:21 UTC
    use {{ ... effectively turning the line in the next debugger step into a comment.

    I don't think this has the desired effect of commenting out the lines. Rather, it runs the debugger command "#" (which does nothing of interest) before running the line itself. Even if you'd use pre-Perl actions (i.e. <), they would still be executed separately, rather than being textually merged with the line(s) in question (as would be required to comment out).

    Try skipping over the $i++, for example... the subsequent print " $i\n" will still print the incremented value (e.g. 3, not 2, on the first iteration).

    An example application of pre-debugger commands would be setting "{ l" to get a listing of the next few lines on every prompt.

Re^2: Using the perl debugger
by codeacrobat (Chaplain) on Mar 15, 2009 at 12:07 UTC
    Unfortunately it doesn't work in perl5db.pl v1.30 :-( After "{{ #" statements are still getting executed.
    $ perl -v This is perl, v5.10.0 built for cygwin-thread-multi-64int (with 6 registered patches, see perl -V for more detail) $ perl -d bla.pl Loading DB routines from perl5db.pl version 1.3 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(bla.pl:5): my @i = (2..5); DB<1> {{ # DB<2> s main::(bla.pl:7): for my $i (@i) { auto(-1) DB<2> # DB<2> s main::(bla.pl:8): $i ++; auto(-1) DB<2> # DB<2> s main::(bla.pl:9): print "foo"; auto(-1) DB<2> # DB<2> s main::(bla.pl:10): print " $i\n"; auto(-1) DB<2> # foo

    print+qq(\L@{[ref\&@]}@{['@'x7^'!#2/"!4']});
Re^2: Using the perl debugger
by ww (Archbishop) on Mar 15, 2009 at 12:49 UTC

    Ooops! The behavior appears to vary depending on how lines are executed, leading me to believe almut may be correct and that codeacrobat's observation may apply to 5.8.8 (and probably others). A caveat (or "confusion") follows. Compare using r instead of stepping:

    >perl -d \pl_test\test{{.pl Loading DB routines from perl5db.pl version 1.28 Editor support available. Enter h or `h h' for help, or `perldoc perldebug' for more help. main::(\pl_test\test{{.pl:5): 5: my @i = (2..5); DB<1> {{ # DB<2> r foo 3 foo 4 foo 5 foo 6 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. auto(-1) DB<2> # DB<2> ...

    BUT, stepping (entirely) through the script:

    BUT: >perl -d pl_test\test{{.pl Loading DB routines from perl5db.pl version 1.28 Editor support available. Enter h or `h h' for help, or `perldoc perldebug' for more help. main::(pl_test\test{{.pl:5): 5: my @i = (2..5); DB<1> {{ # DB<2> s main::(pl_test\test{{.pl:7): 7: for my $i (@i) { auto(-1) DB<2> # DB<2> main::(pl_test\test{{.pl:8): 8: $i ++; auto(-1) DB<2> # DB<2> main::(pl_test\test{{.pl:9): 9: print "foo"; auto(-1) DB<2> # DB<2> foomain::(pl_test\test{{.pl:10): 10: print " $i\n"; auto(-1) DB<2> # DB<2> 3 main::(pl_test\test{{.pl:8): 8: $i ++; auto(-1) DB<2> # DB<2> main::(pl_test\test{{.pl:9): 9: print "foo"; auto(-1) DB<2> # DB<2> foomain::(pl_test\test{{.pl:10): 10: print " $i\n"; auto(-1) DB<2> # DB<2> 4 main::(pl_test\test{{.pl:8): 8: $i ++; auto(-1) DB<2> # DB<2> main::(pl_test\test{{.pl:9): 9: print "foo"; auto(-1) DB<2> # DB<2> foomain::(pl_test\test{{.pl:10): 10: print " $i\n"; auto(-1) DB<2> # DB<2> 5 main::(pl_test\test{{.pl:8): 8: $i ++; auto(-1) DB<2> # DB<2> main::(pl_test\test{{.pl:9): 9: print "foo"; auto(-1) DB<2> # DB<2> foomain::(pl_test\test{{.pl:10): 10: print " $i\n"; auto(-1) DB<2> # DB<2> 6 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. auto(-1) DB<2> # DB<2> Use `q' to quit or `R' to restart. `h q' for details. DB<2> s Use `q' to quit or `R' to restart. `h q' for details. ...

    WTF?

      BUT, stepping (entirely) through the script...

      ?? — I don't really see a difference in output. For example, the line print " $i\n" is still printing 3..6.  And the "foo" is there as well: foomain::(...

Re^2: Using the perl debugger
by incognito129 (Acolyte) on Mar 15, 2009 at 19:37 UTC
    I tried it out but it didn't work.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://750713]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2024-04-18 01:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found