in reply to How can I print variable contents from the debugger non-interactively?

> to print all the variable contents when executing line XXX

some hands on examples

a action (per line) and w watchpoint (each time) take Perl code to be evaluated.

you can do pretty nifty things with that already

sample code

use strict; use warnings; $|=1; # disable buffering my $a; our $y; for (0..10) { print; $a++; $y++; }

a = action cmd on line
DB<71> h a a [line] command Set an action to be done before the line is executed; line defaults to the current execution line. Sequence is: check for breakpoint/watchpoint, print line if necessary, do action, prompt user if necessary, execute line. a Does nothing

a doesn't break unless you set $DB::single explicitly to 1

DB<72> a 10 if($y>3 and $y <7) { print "\n<y: $y>\n" } DB<73> L d:/Users/RolfLangsdorf/AppData/Roaming/pm/tst_debuger.pl: 10: print; action: if($y>3 and $y <7) { print "\n<y: $y>\n" } DB<73> c 0123 <y: 4> 4 <y: 5> 5 <y: 6> 678910 DB<74>
w = watch-expression

DB<79> h w w expr Add a global watch-expression. w Does nothing

w stops if the returned value has changed

w $a would stop each time $a is changing

this only stops if $a is inside the intervall

DB<81> L DB<81> w if ($a>3 and $a <7){ $a } DB<82> c 0123Watchpoint 0: if ($a>3 and $a <7){ $a } changed: old value: '' new value: '4' DB<82> c 4Watchpoint 0: if ($a>3 and $a <7){ $a } changed: old value: '4' new value: '5' DB<82> DB<82> c 5Watchpoint 0: if ($a>3 and $a <7){ $a } changed: old value: '5' new value: '6' DB<82> c 6Watchpoint 0: if ($a>3 and $a <7){ $a } changed: old value: '6' new value: '' DB<82> c 78910 DB<82>

this only stops for the first print and the first non print (print returns 1)

DB<78> w if ($a>3 and $a <7){ print "\n$DB::line<a: $a>\n" } DB<79> L Watch-expressions: if ($a>3 and $a <7){ print "\n$DB::line<a: $a>\n" } DB<79> c 0123 12<a: 4> Watchpoint 0: if ($a>3 and $a <7){ print "\n$DB::line<a: $a>\n" } c +hanged: old value: '' new value: '1' DB<79> c 10<a: 4> 4 11<a: 4> 12<a: 5> 10<a: 5> 5 11<a: 5> 12<a: 6> 10<a: 6> 6 11<a: 6> Watchpoint 0: if ($a>3 and $a <7){ print "\n$DB::line<a: $a>\n" } c +hanged: old value: '1' new value: ''

Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
Je suis Charlie!

  • Comment on Re: How can I print variable contents from the debugger non-interactively? ( a = line action ; w = watch changes everywhere)
  • Select or Download Code

Replies are listed 'Best First'.
Re^2: How can I print variable contents from the debugger non-interactively? ( b= break line conditionally )
by LanX (Saint) on Jul 15, 2017 at 11:42 UTC
    b for break also takes code

    like in a you can execute code Perl line, just return something false if you don't want to break into interactive mode

    DB<119> b 11 print "\n<$y>\n" if $y==3;0 DB<120> L d:/Users/RolfLangsdorf/AppData/Roaming/pm/tst_debuger.pl: 11: $a++; break if (print "\n<$y>\n" if $y==3;0) DB<120> c 0123 <3> 45678910 DB<120>

    Cheers Rolf
    (addicted to the Perl Programming Language and ☆☆☆☆ :)
    Je suis Charlie!