perlmeditation
osunderdog
<p>Rightly or wrongly, I use the debugger. I use it all the time to step through code that I have inherited. Along the way I have run across a few debugger idioms that have been invaluable to my code archiology.</p>
<p>Please respond and share your debugger idioms!</p>
<ul>
<li>Write intermediate data to a file</li>
<p>In some cases, while debugging, it is helpful to capture an intermediate data structure for reference. I find this particularly useful for dumping out xml content that is generated.
</p>
<code>
DB<3> open FH, ">/tmp/foo.txt";
DB<4> print FH "THIS IS AN EXAMPLE";
DB<5> print FH $user_id;
DB<6> close FH
</code>
<li>Step into an expression</li>
<p>You can evaluate any valid perl expression with <code>x</code> while in the debugger. However you can also <em>step into</em> that expression using <code>s</code>. For example:
<code>
DB<6> s $profile->to_xml()
main::((eval 35)[/usr/lib/perl5/5.6.1/perl5db.pl:1521]:3):
3: $profile->to_xml();
DB<<7>>
</code>
<p>At this point, you will be stepping through the expression that was entered on the previous line.
</p>
<li>break the debugger from code</li>
<p>Put the following expression somewhere in your code, run it in the debugger and the debugger will stop on the line immediately following it.</p>
<code>
$DB::single = 1;
</code>
</ul>
<p>
There are many more debugger idioms out there, what are yours?
</p>
<div class="pmsig"><div class="pmsig-338711">
<p>Hazah! I'm Employed! (But still looking...)</p>
</div></div>