Initial add of defaria.com
[clearscm.git] / defaria.com / blogs / Status / 2006 / 10 / perldb-tips.html
1 <!DOCTYPE html>
2 <html lang="en-us" itemscope itemtype="http://schema.org/Article">
3   <head>
4     <meta charset="utf-8">
5     <meta name="description" content="The Perl debugger is one of those valuable tools that surprisingly it seems few Perl coders know well. Here are some quick tips on using the Perl debugger. First a few explanations about commands I tend to use: s Single...">
6     <meta name="generator" content="Movable Type 5.2.3">
7     <title>PerlDB Tips - Status</title>
8     <link rel="alternate" type="application/atom+xml" title="Recent Entries" href="http://defaria.com/blogs/Status/atom.xml">
9     <link rel="canonical" href="http://defaria.com/blogs/Status/2006/10/perldb-tips.html">
10     <meta name="viewport" content="width=device-width,initial-scale=1">
11     <link rel="stylesheet" href="http://defaria.com/blogs/Status/styles.css">
12     <!--[if lt IE 9]>
13     <link rel="stylesheet" href="http://defaria.com/blogs/Status/styles_ie.css">
14     <script src="/mt/mt-static/support/theme_static/rainier/js/html5shiv.js"></script>
15     <![endif]-->
16     
17     <link rel="start" href="http://defaria.com/blogs/Status/">
18
19     <link rel="prev" href="http://defaria.com/blogs/Status/2006/10/gpdb-add-projec.html" title="gpdb_add_project.pl using gpdb user and Nice">
20     <link rel="next" href="http://defaria.com/blogs/Status/2006/10/the-oracle-spea.html" title="The Oracle speaks...">
21     <!-- Open Graph Protocol -->
22     <meta property="og:type" content="article">
23     <meta property="og:locale" content="en-us">
24     <meta property="og:title" content="PerlDB Tips">
25     <meta property="og:url" content="http://defaria.com/blogs/Status/2006/10/perldb-tips.html">
26     <meta property="og:description" content="The Perl debugger is one of those valuable tools that surprisingly it seems few Perl coders know well. Here are some quick tips on using the Perl debugger. First a few explanations about commands I tend to use: s Single...">
27     <meta property="og:site_name" content="Status">
28     <meta property="og:image" content="/mt/mt-static/support/theme_static/rainier/img/siteicon-sample.png">
29     <!-- Metadata -->
30     <meta itemprop="description" content="The Perl debugger is one of those valuable tools that surprisingly it seems few Perl coders know well. Here are some quick tips on using the Perl debugger. First a few explanations about commands I tend to use: s Single...">
31     <link itemprop="url" href="http://defaria.com/blogs/Status/2006/10/perldb-tips.html">
32     <link itemprop="image" href="/mt/mt-static/support/theme_static/rainier/img/siteicon-sample.png">
33     
34   </head>
35   <body>
36     <div id="container">
37       <div id="container-inner">
38         <header id="header" role="banner">
39           <div id="header-inner">
40             <div id="header-content">
41               <h1>
42                 <a href="http://defaria.com/blogs/Status/">
43
44                   Status
45
46                 </a>
47               </h1>
48               
49             </div>
50
51             <nav role="navigation">
52           <ul>
53             <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
54
55
56           </ul>
57         </nav>
58
59           </div>
60         </header>
61         <div id="content">
62           <div id="content-inner">
63             <ul class="breadcrumb breadcrumb-list">
64               <li class="breadcrumb-list-item"><a href="http://defaria.com/blogs/Status/">Home</a></li>
65               <li class="breadcrumb-list-item">PerlDB Tips</li>
66             </ul>
67             <div id="individual-main" class="main" role="main">
68               <article id="entry-1839" class="entry entry-asset asset hentry">
69                 <div class="asset-header">
70                   <h2 itemprop="name" class="asset-name entry-title">PerlDB Tips</h2>
71                   <footer class="asset-meta">
72                     <ul class="asset-meta-list">
73                       <li class="asset-meta-list-item">Posted on <time datetime="2006-10-17T08:41:48-08:00" itemprop="datePublished">October 17, 2006</time></li>
74                       <li class="asset-meta-list-item">by <span class="author entry-author vcard"></span></li>
75
76   
77                       <li class="asset-meta-list-item">in <a itemprop="articleSection" rel="tag" href="http://defaria.com/blogs/Status/texas-instruments/">Texas Instruments</a></li>
78   
79
80                    </ul>
81                 </footer>
82                 </div>
83                 <div class="entry-content asset-content" itemprop="articleBody">
84                   <p>The Perl debugger is one of those valuable tools that surprisingly it seems few Perl coders know well. Here are some quick tips on using the Perl debugger. First a few explanations about commands I tend to use:
85
86 <blockquote>
87 <dl>
88   <dt>s</dt>
89
90   <dd>Single step. Step to the next statement stepping into any subroutines (where the source file is known and accessible).</dd>
91
92   <dt>n</dl>
93
94   <dd>Step over - if the line contains a call to a subroutine then this will step over that subroutine.</dd>
95
96   <dt>r</dt>
97
98   <dd>Return from subroutine - if, say you accidentally stepped into a subroutine or if you just want to return,</dd>
99
100   <dt>R</dt>
101
102   <dd>Rerun - start your Perl script again in the debugger with all the parms you started with.</dd>
103
104   <dt>q</dt>
105
106   <dd>quit</dd>
107
108   <dt>p &lt;variable or expression&gt;</dt>
109
110   <dd>Will print the contents of a variable or expression. Expressions can be Perl expressions including calls to subroutines. You can, for example, do "p 'There are " . scalar @foo . ' lines in foo';</dd>
111
112   <dt>x &lt;variable or expression&gt;</dt>
113
114   <dd>Like p above however p will simply print out HASH for hashes whereas x will format them out. Also x will print out "undef" for things that are undefined yet p will print nothing for them.</dd>
115
116   <dt>l (ell)</dt>
117
118   <dd>List the next windowSize lines (see below). Use "l &lt;n&gt;"  where &lt;n&gt; = a line number to list that line.</dd>
119
120   <dt>v &lt;n&gt;</dt>
121
122   <dd>View lines around &lt;n&gt;</dd>
123
124   <dt>V &lt;package&gt;</dt>
125
126   <dd>List exported subroutines and variables for &lt;package&gt; (e.g. V MyModule will is all stuff exported from MyModule).</dd>
127
128   <dt>f &lt;filename&gt;</dt>
129
130    <dd>File - switch to another file. (e.g. f MyModule) and the debugger switches to viewing MyModule.pm.</dd>
131
132   <dt>c &lt;n&gt;</dt>
133
134   <dd>Continue to line &lt;n&gt;. If n is not specified then just continue until the next break point or the end of the script. Continue is like setting a temporary break point that disappears when you hit the line.</dd>
135
136   <dt>b &lt;n&gt; &lt;condition&gt;</dt>
137
138   <dd>Breakpoint - set a break point (or b &lt;n&gt; $name eq "Donna" which will break at line &lt;n&gt; iff $name is "Donna" (evaluated when the debugger gets to line &lt;n&gt;))
139 </dl>
140 </blockquote>
141
142 <p>Also, at the Perl db prompt you can type in any Perl. So, for example, I often work out regex's that way. I'll be debugging a Perl script and stepping up to something like:</p>
143
144 <div class=code><pre>
145      10==> if (/(\d*).*\s+/) {
146      11      print "match!\n";
147      12      $x = $1;
148      13    }
149 </pre></div>
150
151 <p>Then I'll type in stuff like:</p>
152
153 <div class=code><pre>
154      DB<10> if (/(\d*).*\s+/) { print "1 = $1\n"; } else { print "No
155      match!\n"; }
156      No match!
157      DB<11>
158 </pre></div>
159
160 <p>Then I can use the command history (with set -o emacs at the shell before executing perl db emacs key bindings work for me) to edit and enter that perl if statement changing the regex until it works correctly. This way I know I got the right regex. Copy and paste the new, tested, regex from the debugging session into my code then "R" to reload the debugger.</p>
161
162 <p>Or you can say call an arbitrary subroutine in your script:</p>
163
164 <div class=code><pre>
165        DB<2> b Rexec::ssh
166        DB<3> p Rexec::ssh
167 Rexec::ssh(/view/cmdt_x0062320/vobs/cmtools/src/misc/GPDB/bin/../../../../lib/perl/Rexec.pm:60):
168      60:         my $self = shift;
169        DB<<4>>
170 </pre></div>
171
172 <p>The "p Rexec::ssh" says to print the results of the following expression. The expression is a function call in to the Rexec module for the subroutine ssh. Since we just set a break point there in the previous debug command we break at the start of that subroutine and can then debug it. Note you don't want to "c Rexec::ssh" because that would continue the actual execution of your script and only stop at Rexec::ssh if that routine was actually called. Viola, you just forcefully caused the Perl interpreter to branch to this routine!</p>
173
174 <p>Another thing I'll frequently do is set or change variables to see how the code would proceed <b>if</b> the variables were correct (or perhaps incorrect to test error conditions). So let's say a forced execution of the subroutine Log like the above:
175
176 <div class=code><pre>
177 42      sub Log {
178 43:==>    my $msg = shift;
179 44        print "$msg\n";
180
181   DB<23> s
182 main::Log(EvilTwin.pl:45):       print "$msg\n";
183   DB<24>$msg = "Now I set msg to something I want it to be"
184   DB<25>s
185 Now I set msg to something I want it to be
186 main::Log(EvilTwin.pl:47):              return;
187   DB<25>
188 </pre></div>
189
190 <p>There are all sorts of good reasons to examine (p $variable) and set ($variable = "new value") variables during debugging.</p>
191
192 <p>Finally put the following into ~/.perldb:</p>
193
194 <div class=code><pre>
195      parse_options ("windowSize=23");
196 </pre></div>
197
198 <p>This sets the window size to 23 so that 'l" lists the next 23 lines.</p>
199                   
200                 </div>
201                 <nav class="page-navigation entry-navigation pagination content-nav">
202                   <ul class="page-navigation-list">
203
204                     <li class="page-navigation-list-item page-navigation-prev"><a rel="prev" href="http://defaria.com/blogs/Status/2006/10/gpdb-add-projec.html" title="gpdb_add_project.pl using gpdb user and Nice">Previous entry</a></li>
205
206
207                     <li class="page-navigation-list-item page-navigation-next"><a rel="next" href="http://defaria.com/blogs/Status/2006/10/the-oracle-spea.html" title="The Oracle speaks...">Next entry</a></li>
208
209                   </ul>
210                 </nav>
211                 <!--
212 <aside id="zenback" class="zenback feedback">
213   Please paste Zenback script code here.
214 </aside>
215 -->
216                 
217                 
218               </article>
219             </div>
220             <aside class="widgets related" role="complementary">
221               <nav class="widget-search widget">
222   <div class="widget-content">
223     <form method="get" id="search" action="http://defaria.com/mt/mt-search.cgi">
224       <div>
225         <input type="text" name="search" value="" placeholder="Search...">
226
227         <input type="hidden" name="IncludeBlogs" value="8">
228
229         <input type="hidden" name="limit" value="20">
230         <button type="submit" name="button">
231           <img alt="Search" src="/mt/mt-static/support/theme_static/rainier/img/search-icon.png">
232         </button>
233       </div>
234     </form>
235   </div>
236 </nav>
237 <nav class="widget-archive-category widget">
238   <h3 class="widget-header">Categories</h3>
239   <div class="widget-content">
240     
241       
242     <ul class="widget-list">
243       
244       
245       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/ameriquest/">Ameriquest (99)</a>
246       
247       
248       </li>
249       
250     
251       
252       
253       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/audience/">Audience (3)</a>
254       
255       
256       </li>
257       
258     
259       
260       
261       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/broadcom/">Broadcom (76)</a>
262       
263       
264       </li>
265       
266     
267       
268       
269       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/gpdb/">GPDB (35)</a>
270       
271       
272       </li>
273       
274     
275       
276       
277       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-dynamics/">General Dynamics (61)</a>
278       
279       
280       </li>
281       
282     
283       
284       
285       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-electric/">General Electric (13)</a>
286       
287       
288       </li>
289       
290     
291       
292       
293       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/hewlett-packard/">Hewlett Packard (13)</a>
294       
295       
296       </li>
297       
298     
299       
300       
301       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/lynuxworks/">LynuxWorks (162)</a>
302       
303       
304       </li>
305       
306     
307       
308       
309       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/pqa/">PQA (35)</a>
310       
311       
312       </li>
313       
314     
315       
316       
317       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/salira/">Salira (79)</a>
318       
319       
320       </li>
321       
322     
323       
324       
325       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/tellabs/">Tellabs (2)</a>
326       
327       
328       </li>
329       
330     
331       
332       
333       <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/texas-instruments/">Texas Instruments (31)</a>
334       
335       
336       </li>
337       
338     </ul>
339       
340     
341   </div>
342 </nav>
343   
344
345 <nav class="widget-archive-dropdown widget">
346   <h3 class="widget-header">Archives</h3>
347   <div class="widget-content">
348     <select>
349       <option>Select a Month...</option>
350     
351       <option value="http://defaria.com/blogs/Status/2016/02/">February 2016</option>
352     
353   
354     
355       <option value="http://defaria.com/blogs/Status/2014/09/">September 2014</option>
356     
357   
358     
359       <option value="http://defaria.com/blogs/Status/2014/04/">April 2014</option>
360     
361   
362     
363       <option value="http://defaria.com/blogs/Status/2014/03/">March 2014</option>
364     
365   
366     
367       <option value="http://defaria.com/blogs/Status/2013/02/">February 2013</option>
368     
369   
370     
371       <option value="http://defaria.com/blogs/Status/2012/09/">September 2012</option>
372     
373   
374     
375       <option value="http://defaria.com/blogs/Status/2012/08/">August 2012</option>
376     
377   
378     
379       <option value="http://defaria.com/blogs/Status/2012/05/">May 2012</option>
380     
381   
382     
383       <option value="http://defaria.com/blogs/Status/2012/04/">April 2012</option>
384     
385   
386     
387       <option value="http://defaria.com/blogs/Status/2012/02/">February 2012</option>
388     
389   
390     
391       <option value="http://defaria.com/blogs/Status/2012/01/">January 2012</option>
392     
393   
394     
395       <option value="http://defaria.com/blogs/Status/2011/10/">October 2011</option>
396     
397   
398     
399       <option value="http://defaria.com/blogs/Status/2011/07/">July 2011</option>
400     
401   
402     
403       <option value="http://defaria.com/blogs/Status/2010/09/">September 2010</option>
404     
405   
406     
407       <option value="http://defaria.com/blogs/Status/2010/08/">August 2010</option>
408     
409   
410     
411       <option value="http://defaria.com/blogs/Status/2010/04/">April 2010</option>
412     
413   
414     
415       <option value="http://defaria.com/blogs/Status/2010/03/">March 2010</option>
416     
417   
418     
419       <option value="http://defaria.com/blogs/Status/2010/02/">February 2010</option>
420     
421   
422     
423       <option value="http://defaria.com/blogs/Status/2009/05/">May 2009</option>
424     
425   
426     
427       <option value="http://defaria.com/blogs/Status/2009/04/">April 2009</option>
428     
429   
430     
431       <option value="http://defaria.com/blogs/Status/2008/07/">July 2008</option>
432     
433   
434     
435       <option value="http://defaria.com/blogs/Status/2008/05/">May 2008</option>
436     
437   
438     
439       <option value="http://defaria.com/blogs/Status/2008/04/">April 2008</option>
440     
441   
442     
443       <option value="http://defaria.com/blogs/Status/2008/03/">March 2008</option>
444     
445   
446     
447       <option value="http://defaria.com/blogs/Status/2008/02/">February 2008</option>
448     
449   
450     
451       <option value="http://defaria.com/blogs/Status/2008/01/">January 2008</option>
452     
453   
454     
455       <option value="http://defaria.com/blogs/Status/2007/12/">December 2007</option>
456     
457   
458     
459       <option value="http://defaria.com/blogs/Status/2007/11/">November 2007</option>
460     
461   
462     
463       <option value="http://defaria.com/blogs/Status/2007/10/">October 2007</option>
464     
465   
466     
467       <option value="http://defaria.com/blogs/Status/2007/09/">September 2007</option>
468     
469   
470     
471       <option value="http://defaria.com/blogs/Status/2007/08/">August 2007</option>
472     
473   
474     
475       <option value="http://defaria.com/blogs/Status/2007/07/">July 2007</option>
476     
477   
478     
479       <option value="http://defaria.com/blogs/Status/2007/06/">June 2007</option>
480     
481   
482     
483       <option value="http://defaria.com/blogs/Status/2007/05/">May 2007</option>
484     
485   
486     
487       <option value="http://defaria.com/blogs/Status/2007/04/">April 2007</option>
488     
489   
490     
491       <option value="http://defaria.com/blogs/Status/2007/03/">March 2007</option>
492     
493   
494     
495       <option value="http://defaria.com/blogs/Status/2007/01/">January 2007</option>
496     
497   
498     
499       <option value="http://defaria.com/blogs/Status/2006/12/">December 2006</option>
500     
501   
502     
503       <option value="http://defaria.com/blogs/Status/2006/11/">November 2006</option>
504     
505   
506     
507       <option value="http://defaria.com/blogs/Status/2006/10/">October 2006</option>
508     
509   
510     
511       <option value="http://defaria.com/blogs/Status/2006/09/">September 2006</option>
512     
513   
514     
515       <option value="http://defaria.com/blogs/Status/2006/07/">July 2006</option>
516     
517   
518     
519       <option value="http://defaria.com/blogs/Status/2006/06/">June 2006</option>
520     
521   
522     
523       <option value="http://defaria.com/blogs/Status/2006/05/">May 2006</option>
524     
525   
526     
527       <option value="http://defaria.com/blogs/Status/2006/04/">April 2006</option>
528     
529   
530     
531       <option value="http://defaria.com/blogs/Status/2006/03/">March 2006</option>
532     
533   
534     
535       <option value="http://defaria.com/blogs/Status/2006/02/">February 2006</option>
536     
537   
538     
539       <option value="http://defaria.com/blogs/Status/2006/01/">January 2006</option>
540     
541   
542     
543       <option value="http://defaria.com/blogs/Status/2005/12/">December 2005</option>
544     
545   
546     
547       <option value="http://defaria.com/blogs/Status/2005/11/">November 2005</option>
548     
549   
550     
551       <option value="http://defaria.com/blogs/Status/2005/10/">October 2005</option>
552     
553   
554     
555       <option value="http://defaria.com/blogs/Status/2005/09/">September 2005</option>
556     
557   
558     
559       <option value="http://defaria.com/blogs/Status/2005/08/">August 2005</option>
560     
561   
562     
563       <option value="http://defaria.com/blogs/Status/2005/07/">July 2005</option>
564     
565   
566     
567       <option value="http://defaria.com/blogs/Status/2005/06/">June 2005</option>
568     
569   
570     
571       <option value="http://defaria.com/blogs/Status/2005/05/">May 2005</option>
572     
573   
574     
575       <option value="http://defaria.com/blogs/Status/2005/04/">April 2005</option>
576     
577   
578     
579       <option value="http://defaria.com/blogs/Status/2005/03/">March 2005</option>
580     
581   
582     
583       <option value="http://defaria.com/blogs/Status/2005/02/">February 2005</option>
584     
585   
586     
587       <option value="http://defaria.com/blogs/Status/2005/01/">January 2005</option>
588     
589   
590     
591       <option value="http://defaria.com/blogs/Status/2004/12/">December 2004</option>
592     
593   
594     
595       <option value="http://defaria.com/blogs/Status/2004/09/">September 2004</option>
596     
597   
598     
599       <option value="http://defaria.com/blogs/Status/2004/08/">August 2004</option>
600     
601   
602     
603       <option value="http://defaria.com/blogs/Status/2004/07/">July 2004</option>
604     
605   
606     
607       <option value="http://defaria.com/blogs/Status/2004/06/">June 2004</option>
608     
609   
610     
611       <option value="http://defaria.com/blogs/Status/2004/05/">May 2004</option>
612     
613   
614     
615       <option value="http://defaria.com/blogs/Status/2004/04/">April 2004</option>
616     
617   
618     
619       <option value="http://defaria.com/blogs/Status/2004/03/">March 2004</option>
620     
621   
622     
623       <option value="http://defaria.com/blogs/Status/2004/02/">February 2004</option>
624     
625   
626     
627       <option value="http://defaria.com/blogs/Status/2004/01/">January 2004</option>
628     
629   
630     
631       <option value="http://defaria.com/blogs/Status/2003/12/">December 2003</option>
632     
633   
634     
635       <option value="http://defaria.com/blogs/Status/2003/11/">November 2003</option>
636     
637     </select>
638   </div>
639 </nav>
640     
641   
642
643 <div class="widget-syndication widget section">
644   <div class="widget-content">
645     <p><img src="http://defaria.com/mt/mt-static/images/status_icons/feed.gif" alt="Subscribe to feed" width="9" height="9" /> <a href="http://defaria.com/blogs/Status/atom.xml">Subscribe to this blog's feed</a></p>
646
647   </div>
648 </div>
649
650             </aside>
651           </div>
652         </div>
653         <footer id="footer" role="contentinfo">
654           <div id="footer-inner">
655             <div id="footer-content">
656   <nav role="navigation">
657           <ul>
658             <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
659
660
661           </ul>
662         </nav>
663
664   <p class="license">&copy; Copyright 2016.</p>
665   <p class="poweredby">Powered by <a href="http://www.movabletype.org/">Movable Type</a></p>
666 </div>
667           </div>
668         </footer>
669       </div>
670     </div>
671     <script src="http://defaria.com/mt/mt-static/jquery/jquery.min.js"></script>
672     <script src="http://defaria.com/blogs/Status/mt-theme-scale2.js"></script>
673   </body>
674 </html>