\FOT{2}\Seq%
{\def\HeadingLevel%
{0}\def\PageNumberFormat%
{1}\def\PageNumberRestart%
{0}\def\PageNColumns%
{1}\def\PageColumnSep%
{36\p@}\def\PageBalanceColumns%
{0}\def\WritingMode%
{lefttoright}\def\InputWhitespaceTreatment%
{collapse}\def\LeftMargin%
{72\p@}\def\RightMargin%
{72\p@}\def\PageWidth%
{612\p@}\def\PageHeight%
{792\p@}\def\MinLeading%
{2\p@}\def\MinLeadingFactor%
{0}\def\TopMargin%
{72\p@}\def\BottomMargin%
{96\p@}\def\HeaderMargin%
{48\p@}\def\FooterMargin%
{48\p@}}\Node%
{}\Node%
{\def\Element%
{0}}\Seq%
{}\SpS%
{\def\PageNColumns%
{1}\def\PageNumberRestart%
{0}\def\PageNumberFormat%
{1}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\InputWhitespaceTreatment%
{collapse}\def\Quadding%
{start}\def\fSize%
{10\p@}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\fFamName{Times-New-Roman}\def\LineSpacing%
{13\p@}\def\LineSpacingFactor%
{0}}
\SpSOtherBackLeftFooter%
{}
\SpSOtherBackLeftHeader%
{}
\SpSOtherBackCenterFooter%
{}
\SpSOtherBackCenterHeader%
{}
\SpSOtherBackRightFooter%
{\Seq%
{\def\fPosture%
{italic}}\insertPageNumber%
{}\endSeq{}}
\SpSOtherBackRightHeader%
{\Seq%
{\def\fPosture%
{italic}}\Node%
{\def\Element%
{2}\def\ProcessingMode%
{hf-mode}}\Seq%
{}Debugging PigeonDeliver services and modules\endSeq{}\endNode{}\endSeq{}}
\SpSFirstBackLeftFooter%
{}
\SpSFirstBackLeftHeader%
{}
\SpSFirstBackCenterFooter%
{}
\SpSFirstBackCenterHeader%
{}
\SpSFirstBackRightFooter%
{\Seq%
{\def\fPosture%
{italic}}\insertPageNumber%
{}\endSeq{}}
\SpSFirstBackRightHeader%
{}
\SpSOtherFrontLeftFooter%
{}
\SpSOtherFrontLeftHeader%
{}
\SpSOtherFrontCenterFooter%
{}
\SpSOtherFrontCenterHeader%
{}
\SpSOtherFrontRightFooter%
{\Seq%
{\def\fPosture%
{italic}}\insertPageNumber%
{}\endSeq{}}
\SpSOtherFrontRightHeader%
{\Seq%
{\def\fPosture%
{italic}}\Node%
{\def\Element%
{2}\def\ProcessingMode%
{hf-mode}}\Seq%
{}Debugging PigeonDeliver services and modules\endSeq{}\endNode{}\endSeq{}}
\SpSFirstFrontLeftFooter%
{}
\SpSFirstFrontLeftHeader%
{}
\SpSFirstFrontCenterFooter%
{}
\SpSFirstFrontCenterHeader%
{}
\SpSFirstFrontRightFooter%
{\Seq%
{\def\fPosture%
{italic}}\insertPageNumber%
{}\endSeq{}}
\SpSFirstFrontRightHeader%
{}\Seq%
{}\Seq%
{}\Seq%
{}\Node%
{\def\Element%
{2}\def\ProcessingMode%
{article-titlepage-recto-mode}}\Par%
{\def\fSize%
{24.883\p@}\def\LineSpacing%
{32.348\p@}\def\LineSpacingFactor%
{0}\def\Quadding%
{center}\def\fFamName{Arial}\def\fWeight%
{bold}\def\sbNom%
{18.662\p@}\def\sbMin%
{18.662\p@}\def\sbMax%
{18.662\p@}\def\sbConditional%
{1}\def\KeepWithNext%
{1}}Debugging PigeonDeliver services and modules\endPar{}\endNode{}\Seq%
{}\Node%
{\def\Element%
{3}\def\ProcessingMode%
{article-titlepage-recto-mode}}\Seq%
{}\Par%
{\def\fSize%
{17.28\p@}\def\LineSpacing%
{22.464\p@}\def\LineSpacingFactor%
{0}\def\Quadding%
{center}\def\fFamName{Arial}\def\fWeight%
{bold}\def\sbNom%
{10.8\p@}\def\sbMin%
{10.8\p@}\def\sbMax%
{10.8\p@}\def\sbConditional%
{1}\def\KeepWithNext%
{1}}Carlo Contavalli\endPar{}\Node%
{\def\Element%
{6}\def\ProcessingMode%
{article-titlepage-recto-mode}}\DisplayGroup%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fSize%
{12\p@}}\Node%
{\def\Element%
{7}\def\ProcessingMode%
{article-titlepage-recto-mode}}\DisplayGroup%
{\def\Quadding%
{center}\def\fFamName{Arial}\def\fWeight%
{bold}\def\fSize%
{12\p@}}\Par%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Node%
{\def\Element%
{8}\def\ProcessingMode%
{titlepage-address-mode}}ccontavalli@commedia.it\endNode{}\endPar{}\endDisplayGroup{}\endNode{}\endDisplayGroup{}\endNode{}\endSeq{}\endNode{}\Seq%
{}\Node%
{\def\Element%
{9}\def\ProcessingMode%
{article-titlepage-recto-mode}}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fSize%
{12\p@}\def\sbNom%
{12.96\p@}\def\sbMin%
{12.96\p@}\def\sbMax%
{12.96\p@}\def\sbConditional%
{1}\def\saNom%
{4.5\p@}\def\saMin%
{4.5\p@}\def\saMax%
{4.5\p@}\def\saConditional%
{1}}Revision History\endPar{}\Table%
{\def\TableWidth%
{full}}\TeXTable%
{420\p@}{3}{lll}%
\Node%
{\def\Element%
{10}\def\ProcessingMode%
{article-titlepage-recto-mode}}\TableRow%
{}\TableCell%
{\def\StartIndent%
{0\p@}\def\StartIndentFactor%
{0}}\Par%
{\def\fSize%
{10\p@}\def\fWeight%
{medium}\def\fFamName{Arial}}Revision \Node%
{\def\Element%
{11}\def\ProcessingMode%
{article-titlepage-recto-mode}}1.0.0\endNode{}\endPar{}\endTableCell{}%
&\TableCell%
{\def\StartIndent%
{0\p@}\def\StartIndentFactor%
{0}\def\CellBeforeColumnMargin%
{0\p@}\def\ColumnIndex%
{1}}\Par%
{\def\fSize%
{10\p@}\def\fWeight%
{medium}\def\fFamName{Arial}}\Node%
{\def\Element%
{12}\def\ProcessingMode%
{article-titlepage-recto-mode}}2005/11/19\endNode{}\endPar{}\endTableCell{}%
&\TableCell%
{\def\StartIndent%
{0\p@}\def\StartIndentFactor%
{0}\def\CellBeforeColumnMargin%
{0\p@}\def\ColumnIndex%
{2}}\endTableCell{}%
\endTableRow{}%
\TableRow%
{}\multicolumn%
{3}{l}{\TableCell%
{\def\StartIndent%
{0\p@}\def\StartIndentFactor%
{0}\def\NColumnsSpanned%
{3}}\Par%
{\def\fSize%
{10\p@}\def\fWeight%
{medium}\def\fFamName{Arial}}\Node%
{\def\Element%
{13}\def\ProcessingMode%
{article-titlepage-recto-mode}}First document revision\endNode{}\endPar{}\endTableCell{}%
}%
\endTableRow{}\endNode{}%
\endTeXTable{}%
\endTable{}%
\endSeq{}\endNode{}\Seq%
{}\Node%
{\def\Element%
{14}\def\ProcessingMode%
{article-titlepage-recto-mode}}\DisplayGroup%
{\def\Quadding%
{start}\def\StartIndent%
{65.5\p@}\def\StartIndentFactor%
{0}\def\EndIndent%
{17.5\p@}\def\EndIndentFactor%
{0}\def\fFamName{Times-New-Roman}}\DisplayGroup%
{\def\StartIndent%
{65.5\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Node%
{\def\Element%
{15}\def\ProcessingMode%
{article-titlepage-recto-mode}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        Debugging a running dameon is not easy.
	When there are chroots involved, change of
	privileges or modules being loaded, things may
	even get harder. In this document, we will try
	to give some basic knowledge and useful tricks
	to debug PigeonDeliver services and modules.
      \endPar{}\endNode{}\endDisplayGroup{}\endDisplayGroup{}\endNode{}\endSeq{}\endSeq{}\endSeq{}\endSeq{}\endSeq{}\endSeq{}\Node%
{\def\Element%
{1}}\endNode{}\Node%
{\def\Label%
{postfix}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Seq%
{}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fPosture%
{upright}\def\fSize%
{17.28\p@}\def\LineSpacing%
{22.464\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{0\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\HeadingLevel%
{2}\def\sbNom%
{12.96\p@}\def\sbMin%
{12.96\p@}\def\sbMax%
{12.96\p@}\def\sbConditional%
{1}\def\saNom%
{3.456\p@}\def\saMin%
{3.456\p@}\def\saMax%
{3.456\p@}\def\saConditional%
{1}\def\KeepWithNext%
{1}}1. \Node%
{\def\Element%
{17}\def\ProcessingMode%
{title-sosofo-mode}}Debugging modules using the Postfix SAPI\endNode{}\endPar{}\endSeq{}\Node%
{\def\Element%
{17}}\endNode{}\Node%
{\def\Element%
{18}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
      As to debug any other module, it is best to first test
      it alone, without other components possibly interferring
      with its own code.
    \endPar{}\endNode{}\Node%
{\def\Element%
{19}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
      Using the Postfix SAPI, it is thus a good idea to first
      test the module alone, without any other PigeonDeliver modules,
      by forcing Postfix to use the module directly as a service.
    \endPar{}\endNode{}\Node%
{\def\Element%
{20}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
      Along the whole document, we will be testing the
      mailAntivirus module, one of the standard modules 
      provided with PigeonDeliver.
    \endPar{}\endNode{}\Node%
{\def\Element%
{21}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Seq%
{}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fPosture%
{upright}\def\fSize%
{14.4\p@}\def\LineSpacing%
{18.72\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\HeadingLevel%
{3}\def\sbNom%
{10.8\p@}\def\sbMin%
{10.8\p@}\def\sbMax%
{10.8\p@}\def\sbConditional%
{1}\def\saNom%
{2.88\p@}\def\saMin%
{2.88\p@}\def\saMax%
{2.88\p@}\def\saConditional%
{1}\def\KeepWithNext%
{1}}1.1. \Node%
{\def\Element%
{22}\def\ProcessingMode%
{title-sosofo-mode}}Testing the module alone\endNode{}\endPar{}\endSeq{}\Node%
{\def\Element%
{22}}\endNode{}\Node%
{\def\Element%
{23}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        In order to test your module alone, you need to:
	\Node%
{\def\Element%
{24}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}\def\saNom%
{5\p@}\def\saMin%
{5\p@}\def\saMax%
{5\p@}\def\saConditional%
{1}}\Node%
{\def\Element%
{25}}\Node%
{\def\Element%
{26}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\KeepWithNext%
{1}}configure the master.cf file\endPar{}\endNode{}\Node%
{\def\Element%
{27}}\DisplayGroup%
{\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}}\Par%
{\def\FirstLineStartIndent%
{-20\p@}\def\FirstLineStartIndentFactor%
{0}\def\fFamName{Times-New-Roman}\def\fWeight%
{medium}\def\fSize%
{10\p@}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}\Seq%
{}\LineField%
{\def\FieldWidth%
{20\p@}\def\FieldWidthFactor%
{0}} \endLineField{}\endSeq{}\Node%
{\def\Element%
{28}\def\ProcessingMode%
{listitem-content-mode}}\Seq%
{}Specify a line with the name of the service in the first
	      column, and pd-\/postfix in the last column, like in the following:
\Node%
{\def\Element%
{29}\def\ProcessingMode%
{listitem-content-mode}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}
mailAntivirus unix  -\/  -\/  -\/  -\/  -\/  pd-\/postfix -\/D
\endPar{}\endNode{}
	      Note that the -\/D parameter after pd-\/postfix tells the postfix
	      library to attach a debugger as soon as this process is started,
	      while the first column tells pd-\/postfix and the postfix master
	      they will have to deal with requests directed to the mailAntivirus
	      service.\endSeq{}\endNode{}\endPar{}\endDisplayGroup{}\endNode{}\endNode{}\Node%
{\def\Element%
{30}}\Node%
{\def\Element%
{31}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\KeepWithNext%
{1}}configure a debugger in the main.cf file\endPar{}\endNode{}\Node%
{\def\Element%
{32}}\DisplayGroup%
{\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}}\Par%
{\def\FirstLineStartIndent%
{-20\p@}\def\FirstLineStartIndentFactor%
{0}\def\fFamName{Times-New-Roman}\def\fWeight%
{medium}\def\fSize%
{10\p@}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}\Seq%
{}\LineField%
{\def\FieldWidth%
{20\p@}\def\FieldWidthFactor%
{0}} \endLineField{}\endSeq{}\Node%
{\def\Element%
{33}\def\ProcessingMode%
{listitem-content-mode}}\Seq%
{}Well, whenever postfix needs to load a service with
	      the -\/D parameters, a debugger is first loaded and
	      attacched to the process.\endSeq{}\endNode{}\endPar{}\Node%
{\def\Element%
{34}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}The problem
	      is usually how to then attach the debuggr to a console.
	      There are many possible choices. For example, you
	      could use a serial line or, as suggested in the postfix
	      manual, use X and attach gdb to an xterm. However, I
	      don't use X often, and I prefer to attach gdb to "screen"
	      sessions. In order to do so, you need: screen 
	      installed on your system, some practice in using it (please, read
	      the manual or some tutorial around the internet), and
	      to specify the following line in the main.cf:
\Node%
{\def\Element%
{35}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}
debugger\char95{}command =
  PATH=/usr/bin:/usr/X11R6/bin
  screen -\/d -\/S \$process\char95{}name.\$process\char95{}id 
    -\/m gdb \$daemon\char95{}directory/\$process\char95{}name \$process\char95{}id \& sleep 5
\endPar{}\endNode{}
	    \endPar{}\endNode{}\endDisplayGroup{}\endNode{}\endNode{}\Node%
{\def\Element%
{36}}\Node%
{\def\Element%
{37}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\KeepWithNext%
{1}}configure the main.cf file to force delivery using the specified module\endPar{}\endNode{}\Node%
{\def\Element%
{38}}\DisplayGroup%
{\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}}\Par%
{\def\FirstLineStartIndent%
{-20\p@}\def\FirstLineStartIndentFactor%
{0}\def\fFamName{Times-New-Roman}\def\fWeight%
{medium}\def\fSize%
{10\p@}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}\Seq%
{}\LineField%
{\def\FieldWidth%
{20\p@}\def\FieldWidthFactor%
{0}} \endLineField{}\endSeq{}\Node%
{\def\Element%
{39}\def\ProcessingMode%
{listitem-content-mode}}\Seq%
{}The main parameters are:
\Node%
{\def\Element%
{40}\def\ProcessingMode%
{listitem-content-mode}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}
service = mailAntivirus
default\char95{}transport = mailAntivirus
\endPar{}\endNode{}
	      The first one is a PigeonDeliver specific parameter,
	      which forces the loading of the mailAntivirus module under
	      \Node%
{\def\Element%
{41}\def\ProcessingMode%
{listitem-content-mode}}\Seq%
{\def\fPosture%
{italic}}any\endSeq{}\endNode{} circumstance.\endSeq{}\endNode{}\endPar{}\Node%
{\def\Element%
{42}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	      The second parameter tells postfix to use the mailAntivirus
	      module as the default transport service.
	    \endPar{}\endNode{}\Node%
{\def\Element%
{43}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	      Make also sure not to have any transport map specified, and 
	      not to have any other "dangerous" configuration. My own debugging 
	      configuration file simply looks something like:
\Node%
{\def\Element%
{44}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}
service = mailAntivirus
default\char95{}transport = mailAntivirus

myhostname = localhost
mydomain = pippo.it

debugger\char95{}command =
  PATH=/usr/bin:/usr/X11R6/bin
  screen -\/d -\/S \$process\char95{}name.\$process\char95{}id 
    -\/m gdb \$daemon\char95{}directory/\$process\char95{}name \$process\char95{}id \& sleep 5
\endPar{}\endNode{}
	    \endPar{}\endNode{}\endDisplayGroup{}\endNode{}\endNode{}\Node%
{\def\Element%
{45}}\Node%
{\def\Element%
{46}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\KeepWithNext%
{1}}disable any kind of external delivery\endPar{}\endNode{}\Node%
{\def\Element%
{47}}\DisplayGroup%
{\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}}\Par%
{\def\FirstLineStartIndent%
{-20\p@}\def\FirstLineStartIndentFactor%
{0}\def\fFamName{Times-New-Roman}\def\fWeight%
{medium}\def\fSize%
{10\p@}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}\Seq%
{}\LineField%
{\def\FieldWidth%
{20\p@}\def\FieldWidthFactor%
{0}} \endLineField{}\endSeq{}\Node%
{\def\Element%
{48}\def\ProcessingMode%
{listitem-content-mode}}\Seq%
{}now, make sure your debugging server will not
	    connect to the outside world, trying to deliver
	    the junk emails you will use for debugging.\endSeq{}\endNode{}\endPar{}\Node%
{\def\Element%
{49}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	    An easy way to do so is to edit the master.cf
	    file and comment out all the lines related 
	    to "external services", like the "smtp" line
	    and the "lmtp" service. As an example, to 
	    avoid any kind of outgoing smtp connection,
	    you can comment out the line:
\Node%
{\def\Element%
{50}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}
\#smtp  unix  -\/  -\/  -\/  -\/  -\/  smtp
\endPar{}\endNode{}
	    \endPar{}\endNode{}\Node%
{\def\Element%
{51}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	     Since I often work on workstations where there
	     is a real smtp server up and running, I usually
	     also change the line:
\Node%
{\def\Element%
{52}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}
smtp  inet  n  -\/  -\/  -\/  -\/  smtpd
    in something like
dsmtp  inet  n  -\/  -\/  -\/  -\/  smtpd
\endPar{}\endNode{}
	      in order to have a different service in the 
	      first column, so, my server, will not listen
	      on port 25 (dsmtp must be defined in 
	      /etc/services).
	    \endPar{}\endNode{}\endDisplayGroup{}\endNode{}\endNode{}\Node%
{\def\Element%
{53}}\Node%
{\def\Element%
{54}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\KeepWithNext%
{1}}start to deliver something and have fun\endPar{}\endNode{}\Node%
{\def\Element%
{55}}\DisplayGroup%
{\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}}\Par%
{\def\FirstLineStartIndent%
{-20\p@}\def\FirstLineStartIndentFactor%
{0}\def\fFamName{Times-New-Roman}\def\fWeight%
{medium}\def\fSize%
{10\p@}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}\Seq%
{}\LineField%
{\def\FieldWidth%
{20\p@}\def\FieldWidthFactor%
{0}} \endLineField{}\endSeq{}\Node%
{\def\Element%
{56}\def\ProcessingMode%
{listitem-content-mode}}\Seq%
{}You can use some of the mails in 
	      test/chat/ to try to deliver emails.
	      As an example, to try to deliver a single
	      mail, just run something like:
\Node%
{\def\Element%
{57}\def\ProcessingMode%
{listitem-content-mode}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}
socket localhost dsmtp <\/ test/chat/input00
  or
socat STDIO TCP4:localhost:dsmtp <\/ test/chat/input00
  or
nc localhost dsmtp <\/ test/chat/input00
\endPar{}\endNode{}
	      I personally got in love with socat and socket, 
	      even if I can't explain the incomprensible (to me) 
	      popularity of nc (netcat).\endSeq{}\endNode{}\endPar{}\endDisplayGroup{}\endNode{}\endNode{}\endDisplayGroup{}\endNode{}

      \endPar{}\endNode{}\endSeq{}\endDisplayGroup{}\endNode{}\Node%
{\def\Element%
{58}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Seq%
{}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fPosture%
{upright}\def\fSize%
{14.4\p@}\def\LineSpacing%
{18.72\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\HeadingLevel%
{3}\def\sbNom%
{10.8\p@}\def\sbMin%
{10.8\p@}\def\sbMax%
{10.8\p@}\def\sbConditional%
{1}\def\saNom%
{2.88\p@}\def\saMin%
{2.88\p@}\def\saMax%
{2.88\p@}\def\saConditional%
{1}\def\KeepWithNext%
{1}}1.2. \Node%
{\def\Element%
{59}\def\ProcessingMode%
{title-sosofo-mode}}Real debugging for real men\endNode{}\endPar{}\endSeq{}\Node%
{\def\Element%
{59}}\endNode{}\Node%
{\def\Element%
{60}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        When gdb is started by the postfix API, if you used
	the gdb\char95{}command suggested in the previous section,
	you should end up with a brand new screen session
	for your debugger.
      \endPar{}\endNode{}\Node%
{\def\Element%
{61}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        Just run "su" to become root, and a good and nice
	"screen -\/ls" to get the listing of all the screen
	sessions available. You should see something like:
\Node%
{\def\Element%
{62}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}
There are screens on:
        9859.pd-\/postfix.9856    (Detached)
        24200.vc-\/3.joshua       (Attached)
2 Sockets in /var/run/screen/S-\/root.
\endPar{}\endNode{}
	well, the pd-\/postfix session above should contain our
	own gdb. In my case, running something like "screen -\/RR"
	or "screen -\/R 9859" should get me to the gdb prompt.
	But, hey, should already know how to use screen! Just
	to make sure you know at least a couple commands: "ctrl+a k"
	(ctrl+a followed by k, without any control key pressed),
	will kill your debugger, "ctrl+a d" will allow you to leave
	your debugger alone and get back to the shell...
      \endPar{}\endNode{}\Node%
{\def\Element%
{63}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        Well, once you reattach to your screen session, you
	should be somewhere like:
\Node%
{\def\Element%
{64}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}
[...]
Reading symbols from /var/spool/postfix/lib/libnss\char95{}files.so.2...done.
Loaded symbols for /var/spool/postfix/lib/libnss\char95{}files.so.2
0xb7cbfb1e in waitpid () from /lib/tls/libc.so.6
(gdb)
\endPar{}\endNode{}
	which means, somewhere in postfix or your own libc
	API. Well, now, however, you are in gdb, and you should
	figure out what to do by yourself (why did you bother
	using gdb in the first place??).
      \endPar{}\endNode{}\Node%
{\def\Element%
{65}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        Usually, when using gdb, the first step is to get
	to the piece of code you suspect to have problems,
	take a deep look to what it is doing, and then
	correct any error you may find.
      \endPar{}\endNode{}\Node%
{\def\Element%
{66}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        The next few sections will explain some tricks you may 
	use to get your gdb to the correct place at the 
	right time.
      \endPar{}\endNode{}\endSeq{}\endDisplayGroup{}\endNode{}\Node%
{\def\Element%
{67}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Seq%
{}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fPosture%
{upright}\def\fSize%
{14.4\p@}\def\LineSpacing%
{18.72\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\HeadingLevel%
{3}\def\sbNom%
{10.8\p@}\def\sbMin%
{10.8\p@}\def\sbMax%
{10.8\p@}\def\sbConditional%
{1}\def\saNom%
{2.88\p@}\def\saMin%
{2.88\p@}\def\saMax%
{2.88\p@}\def\saConditional%
{1}\def\KeepWithNext%
{1}}1.3. \Node%
{\def\Element%
{68}\def\ProcessingMode%
{title-sosofo-mode}}General approach for debugging\endNode{}\endPar{}\endSeq{}\Node%
{\def\Element%
{68}}\endNode{}\Node%
{\def\Element%
{69}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        Well, as you may well already have clear
	in your mind, you should start debugging
	using something like gdb only when there 
	are bugs you cannot find by simply reading
	the code and/or trying to understand 
	what is going on.
      \endPar{}\endNode{}\Node%
{\def\Element%
{70}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        Usually, you should already have an idea
	in which method of your module the error 
	lies. 
      \endPar{}\endNode{}\Node%
{\def\Element%
{71}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        Well, if you already have an idea of where
	your error lies, you can skip this section
	and go on to the next one. 
      \endPar{}\endNode{}\Node%
{\def\Element%
{72}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        If your application is getting a signal or
	crashing, or something else quite easy to
	see from a debugger, a good approach is
	just to run the application (use the run
	command), until it either crashes, gets the
	signal, or a catchpoint/watchpoint you 
	previously set is hit.
      \endPar{}\endNode{}\Node%
{\def\Element%
{73}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        When such an event happens, you can then
	simply: get a copy of the mail that caused
	the error (use postcat -\/q <\/nameofqueueid>\/),
	get a copy of the user configuration, get
	a backtrace by typeing "bt" and by first using 
	the "share" command.
      \endPar{}\endNode{}\Node%
{\def\Element%
{74}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        As soon as you know where the bug lies, you
	can easily try to figure out how that condition
	verified, or try to follow the code under
	gdb until that point.
      \endPar{}\endNode{}\Node%
{\def\Element%
{75}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        "until that point"... until that point from where?
	When started, gdb and the \%ip register is somewhere
	not well specified in my memory... how do I get
	to "that point"? step by step? which functions should
	I skip? How should I enter my module? Well, those are
	all good questions we will try to answer in the
	next section.
      \endPar{}\endNode{}\endSeq{}\endDisplayGroup{}\endNode{}\Node%
{\def\Element%
{76}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Seq%
{}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fPosture%
{upright}\def\fSize%
{14.4\p@}\def\LineSpacing%
{18.72\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\HeadingLevel%
{3}\def\sbNom%
{10.8\p@}\def\sbMin%
{10.8\p@}\def\sbMax%
{10.8\p@}\def\sbConditional%
{1}\def\saNom%
{2.88\p@}\def\saMin%
{2.88\p@}\def\saMax%
{2.88\p@}\def\saConditional%
{1}\def\KeepWithNext%
{1}}1.4. \Node%
{\def\Element%
{77}\def\ProcessingMode%
{title-sosofo-mode}}Useful places for breakpoints\endNode{}\endPar{}\endSeq{}\Node%
{\def\Element%
{77}}\endNode{}\Node%
{\def\Element%
{78}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        If you have problems in your \char95{}load or \char95{}init 
	methods, you should probably place a breakpoint
	in dscm\char95{}postfix\char95{}preinit, probably around main.c:160, 
	where the module has just been loaded. Just do something like:
\Node%
{\def\Element%
{79}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}
br main.c:160
\endPar{}\endNode{}
	and then "continue" until the breakpoint is hit. When you
	are there, use "share" to load shared symbols and either:
	\Node%
{\def\Element%
{80}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\saNom%
{5\p@}\def\saMin%
{5\p@}\def\saMax%
{5\p@}\def\saConditional%
{1}}\Node%
{\def\Element%
{81}}\DisplayGroup%
{\def\StartIndent%
{58\p@}\def\StartIndentFactor%
{0}}\Par%
{\def\FirstLineStartIndent%
{-10\p@}\def\FirstLineStartIndentFactor%
{0}\def\fFamName{Times-New-Roman}\def\fWeight%
{medium}\def\fSize%
{10\p@}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}\Seq%
{}\LineField%
{\def\fSize%
{8\p@}\def\PositionPointShift%
{0\p@}\def\PositionPointShiftFactor%
{0}\def\FieldWidth%
{10\p@}\def\FieldWidthFactor%
{0}}\Character{8226}\endLineField{}\endSeq{}\Node%
{\def\Element%
{82}\def\ProcessingMode%
{listitem-content-mode}}\Seq%
{}"step" ("s") into the dscm\char95{}module\char95{}load request to see
	    why exactly your module is not being loaded (keep under
	    control the fpath and mname variables).\endSeq{}\endNode{}\endPar{}\endDisplayGroup{}\endNode{}\Node%
{\def\Element%
{83}}\DisplayGroup%
{\def\StartIndent%
{58\p@}\def\StartIndentFactor%
{0}}\Par%
{\def\FirstLineStartIndent%
{-10\p@}\def\FirstLineStartIndentFactor%
{0}\def\fFamName{Times-New-Roman}\def\fWeight%
{medium}\def\fSize%
{10\p@}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}\Seq%
{}\LineField%
{\def\fSize%
{8\p@}\def\PositionPointShift%
{0\p@}\def\PositionPointShiftFactor%
{0}\def\FieldWidth%
{10\p@}\def\FieldWidthFactor%
{0}}\Character{8226}\endLineField{}\endSeq{}\Node%
{\def\Element%
{84}\def\ProcessingMode%
{listitem-content-mode}}\Seq%
{}"next" ("n") after the dscm\char95{}module\char95{}load function, 
	    run the "share" command (read the next sections!)
	    and place a breakpoint on any of the methods you
	    are interested into.\endSeq{}\endNode{}\endPar{}\endDisplayGroup{}\endNode{}\endDisplayGroup{}\endNode{}
	\endPar{}\endNode{}\Node%
{\def\Element%
{85}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	If you need to debug your del\char95{}init, del\char95{}perform or any termination
	method, you can just place a "breakpoint" in the "dscm\char95{}postfix\char95{}deliver"
	function, with something like:
\Node%
{\def\Element%
{86}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}
br dscm\char95{}postfix\char95{}deliver
\endPar{}\endNode{}
	and then go on with debugging, using the "continue"
	command until gdb hits the breakpoint.
      \endPar{}\endNode{}\Node%
{\def\Element%
{87}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        If you don't need to debug the first request processed by
	the module, you can also simply run the "continue" command  
	and then press "ctrl+c" to get attention from gdb.
      \endPar{}\endNode{}\endSeq{}\endDisplayGroup{}\endNode{}\endSeq{}\endDisplayGroup{}\endNode{}\Node%
{\def\Element%
{88}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Seq%
{}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fPosture%
{upright}\def\fSize%
{17.28\p@}\def\LineSpacing%
{22.464\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{0\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\HeadingLevel%
{2}\def\sbNom%
{12.96\p@}\def\sbMin%
{12.96\p@}\def\sbMax%
{12.96\p@}\def\sbConditional%
{1}\def\saNom%
{3.456\p@}\def\saMin%
{3.456\p@}\def\saMax%
{3.456\p@}\def\saConditional%
{1}\def\KeepWithNext%
{1}}2. \Node%
{\def\Element%
{89}\def\ProcessingMode%
{title-sosofo-mode}}General notes\endNode{}\endPar{}\endSeq{}\Node%
{\def\Element%
{89}}\endNode{}\Node%
{\def\Element%
{90}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Seq%
{}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fPosture%
{upright}\def\fSize%
{14.4\p@}\def\LineSpacing%
{18.72\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\HeadingLevel%
{3}\def\sbNom%
{10.8\p@}\def\sbMin%
{10.8\p@}\def\sbMax%
{10.8\p@}\def\sbConditional%
{1}\def\saNom%
{2.88\p@}\def\saMin%
{2.88\p@}\def\saMax%
{2.88\p@}\def\saConditional%
{1}\def\KeepWithNext%
{1}}2.1. \Node%
{\def\Element%
{91}\def\ProcessingMode%
{title-sosofo-mode}}raise and signal 6 terminations\endNode{}\endPar{}\endSeq{}\Node%
{\def\Element%
{91}}\endNode{}\Node%
{\def\Element%
{92}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        Whenever you see a backtrace starting with raise,
	the problem is probably either a failed assertion
	or a "panic" call made somewhere by the code.
      \endPar{}\endNode{}\Node%
{\def\Element%
{93}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
        In the first case, a backtrace should give you full
	details about the problem. In the second case
	you should be able to find further details in the
	system logs.
      \endPar{}\endNode{}\endSeq{}\endDisplayGroup{}\endNode{}\Node%
{\def\Element%
{94}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Seq%
{}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fPosture%
{upright}\def\fSize%
{14.4\p@}\def\LineSpacing%
{18.72\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\HeadingLevel%
{3}\def\sbNom%
{10.8\p@}\def\sbMin%
{10.8\p@}\def\sbMax%
{10.8\p@}\def\sbConditional%
{1}\def\saNom%
{2.88\p@}\def\saMin%
{2.88\p@}\def\saMax%
{2.88\p@}\def\saConditional%
{1}\def\KeepWithNext%
{1}}2.2. \Node%
{\def\Element%
{95}\def\ProcessingMode%
{title-sosofo-mode}}When step (s) doesn't work\endNode{}\endPar{}\endSeq{}\Node%
{\def\Element%
{95}}\endNode{}\Node%
{\def\Element%
{96}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  Depending on the version of gdb, it may sometimes
	  decide not to step into functions, even when asked
	  to do so with the 's'tep command. 
	\endPar{}\endNode{}\Node%
{\def\Element%
{97}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  Usually, this happens when there are shared libraries
	  or modules involved (uhm .. sounds like the PigeonDeliver
	  situation, doesn't it?). Well, in order to force gdb
	  to step into functions you really want to debug, you
	  can set a breakpoint on that function, using the 'br'
	  command.
	\endPar{}\endNode{}\Node%
{\def\Element%
{98}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  There probably are smarter ways to achieve this same
	  result. However, using a 'br' \Node%
{\def\Element%
{99}}\Seq%
{\def\fPosture%
{italic}}has always\endSeq{}\endNode{}
	  worked (for me).
	\endPar{}\endNode{}\endSeq{}\endDisplayGroup{}\endNode{}\Node%
{\def\Element%
{100}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Seq%
{}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fPosture%
{upright}\def\fSize%
{14.4\p@}\def\LineSpacing%
{18.72\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\HeadingLevel%
{3}\def\sbNom%
{10.8\p@}\def\sbMin%
{10.8\p@}\def\sbMax%
{10.8\p@}\def\sbConditional%
{1}\def\saNom%
{2.88\p@}\def\saMin%
{2.88\p@}\def\saMax%
{2.88\p@}\def\saConditional%
{1}\def\KeepWithNext%
{1}}2.3. \Node%
{\def\Element%
{101}\def\ProcessingMode%
{title-sosofo-mode}}Signal handling\endNode{}\endPar{}\endSeq{}\Node%
{\def\Element%
{101}}\endNode{}\Node%
{\def\Element%
{102}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  Let's say you are happily debugging your code, quite
	  close to finding your own bug. Well, at a certain
	  point a signal is received. Your gdb session immediately
	  jumps to that signal handler.
	\endPar{}\endNode{}\Node%
{\def\Element%
{103}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  Well, sometimes this can be really useful, some
	  others it may get really annoying, at least for
	  two reasons: if the signal is completely unrelated
	  to your program, you need to concentrate on how to get
	  back to your code and go on debugging, which can
	  be a waste of time. Additionally, gdb reports 
	  signals that your application may already be ignoring
	  or set to the default handler.
	\endPar{}\endNode{}\Node%
{\def\Element%
{104}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  To get information on how gdb will handle your
	  signals, you can use:
\Node%
{\def\Element%
{105}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}
info signals
  or
info handle
\endPar{}\endNode{}
	  To change the default behavior for a given signal, you
	  can, as an example, use:
\Node%
{\def\Element%
{106}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}
handle SIGPIPE nostop print ignore
\endPar{}\endNode{}
	  which means: 
	  \Node%
{\def\Element%
{107}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}\def\saNom%
{5\p@}\def\saMin%
{5\p@}\def\saMax%
{5\p@}\def\saConditional%
{1}}\Node%
{\def\Element%
{108}}\Node%
{\def\Element%
{109}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\KeepWithNext%
{1}}nostop\endPar{}\endNode{}\Node%
{\def\Element%
{110}}\DisplayGroup%
{\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}}\Par%
{\def\FirstLineStartIndent%
{-20\p@}\def\FirstLineStartIndentFactor%
{0}\def\fFamName{Times-New-Roman}\def\fWeight%
{medium}\def\fSize%
{10\p@}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}\Seq%
{}\LineField%
{\def\FieldWidth%
{20\p@}\def\FieldWidthFactor%
{0}} \endLineField{}\endSeq{}\Node%
{\def\Element%
{111}\def\ProcessingMode%
{listitem-content-mode}}\Seq%
{}we do not want to debug the signal handler,
		or the code nearby.
		Do not give us back the prompt whenever that
		signal is received.\endSeq{}\endNode{}\endPar{}\endDisplayGroup{}\endNode{}\endNode{}\Node%
{\def\Element%
{112}}\Node%
{\def\Element%
{113}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\KeepWithNext%
{1}}print\endPar{}\endNode{}\Node%
{\def\Element%
{114}}\DisplayGroup%
{\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}}\Par%
{\def\FirstLineStartIndent%
{-20\p@}\def\FirstLineStartIndentFactor%
{0}\def\fFamName{Times-New-Roman}\def\fWeight%
{medium}\def\fSize%
{10\p@}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}\Seq%
{}\LineField%
{\def\FieldWidth%
{20\p@}\def\FieldWidthFactor%
{0}} \endLineField{}\endSeq{}\Node%
{\def\Element%
{115}\def\ProcessingMode%
{listitem-content-mode}}\Seq%
{}tell us you did get the signal.\endSeq{}\endNode{}\endPar{}\endDisplayGroup{}\endNode{}\endNode{}\Node%
{\def\Element%
{116}}\Node%
{\def\Element%
{117}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\KeepWithNext%
{1}}ignore\endPar{}\endNode{}\Node%
{\def\Element%
{118}}\DisplayGroup%
{\def\StartIndent%
{68\p@}\def\StartIndentFactor%
{0}}\Par%
{\def\FirstLineStartIndent%
{-20\p@}\def\FirstLineStartIndentFactor%
{0}\def\fFamName{Times-New-Roman}\def\fWeight%
{medium}\def\fSize%
{10\p@}\def\sbNom%
{5\p@}\def\sbMin%
{5\p@}\def\sbMax%
{5\p@}\def\sbConditional%
{1}}\Seq%
{}\LineField%
{\def\FieldWidth%
{20\p@}\def\FieldWidthFactor%
{0}} \endLineField{}\endSeq{}\Node%
{\def\Element%
{119}\def\ProcessingMode%
{listitem-content-mode}}\Seq%
{}do not tell the application you did get that signal,
		since the application does not care about it.\endSeq{}\endNode{}\endPar{}\endDisplayGroup{}\endNode{}\endNode{}\endDisplayGroup{}\endNode{}
	  It is important to note that gdb has different defaults
	  for different signals. So, whenever you are dealing or
	  want to deal with signals, make sure to change those
	  defaults to a value that may suite your needs.
	\endPar{}\endNode{}\endSeq{}\endDisplayGroup{}\endNode{}\Node%
{\def\Element%
{120}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Seq%
{}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fPosture%
{upright}\def\fSize%
{14.4\p@}\def\LineSpacing%
{18.72\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\HeadingLevel%
{3}\def\sbNom%
{10.8\p@}\def\sbMin%
{10.8\p@}\def\sbMax%
{10.8\p@}\def\sbConditional%
{1}\def\saNom%
{2.88\p@}\def\saMin%
{2.88\p@}\def\saMax%
{2.88\p@}\def\saConditional%
{1}\def\KeepWithNext%
{1}}2.4. \Node%
{\def\Element%
{121}\def\ProcessingMode%
{title-sosofo-mode}}Shared modules\endNode{}\endPar{}\endSeq{}\Node%
{\def\Element%
{121}}\endNode{}\Node%
{\def\Element%
{122}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  Well, many pigeondeliver components are made as
	  shared objects. Sometimes, gdb fails to load
	  the symbols for shared objects.
	\endPar{}\endNode{}\Node%
{\def\Element%
{123}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  In order to load those symbols, you can simply
	  run the command:
\Node%
{\def\Element%
{124}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}
share
\endPar{}\endNode{}
	\endPar{}\endNode{}\Node%
{\def\Element%
{125}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  Note that until you run the above command, all
	  external symbols that haven't yet been loaded
	  will be considered exactly like libraries, which
	  means: "step" will not enter the function, "breakpoints"
	  will be almost ignored, "list" and many other commands
	  will not be able to show any information about the code.
	\endPar{}\endNode{}\Node%
{\def\Element%
{126}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  If you get the error "Error while reading shared library symbols:
	  xxxx: No such file or directory.", gdb is probably having
	  troubles in figuring out the real path of the library,
	  probably because of postfix chroots. Read the next
	  section.
	\endPar{}\endNode{}\endSeq{}\endDisplayGroup{}\endNode{}\Node%
{\def\Element%
{127}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Seq%
{}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fPosture%
{upright}\def\fSize%
{14.4\p@}\def\LineSpacing%
{18.72\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\HeadingLevel%
{3}\def\sbNom%
{10.8\p@}\def\sbMin%
{10.8\p@}\def\sbMax%
{10.8\p@}\def\sbConditional%
{1}\def\saNom%
{2.88\p@}\def\saMin%
{2.88\p@}\def\saMax%
{2.88\p@}\def\saConditional%
{1}\def\KeepWithNext%
{1}}2.5. \Node%
{\def\Element%
{128}\def\ProcessingMode%
{title-sosofo-mode}}gdb and postfix chroots\endNode{}\endPar{}\endSeq{}\Node%
{\def\Element%
{128}}\endNode{}\Node%
{\def\Element%
{129}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  Sometimes, even with the above command gdb will
	  not be able to load the modules symbol table.
	\endPar{}\endNode{}\Node%
{\def\Element%
{130}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  Before issueing that command, or in case that command
	  fails, you may want to try to specify:
\Node%
{\def\Element%
{131}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}
set solib-\/search-\/path=/var/spool/postfix/:
\endPar{}\endNode{}
	  this command should instruct gdb to look for libraries
	  (or other shared object files) into /var/spool/postfix/,
	  even if the path of the library is absolute.
	\endPar{}\endNode{}\Node%
{\def\Element%
{132}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  If you run the "share" command one more time, it should
	  now succeed with all the libraries and modules.
	\endPar{}\endNode{}\endSeq{}\endDisplayGroup{}\endNode{}\Node%
{\def\Element%
{133}}\DisplayGroup%
{\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}\Seq%
{}\Seq%
{}\Par%
{\def\fFamName{Arial}\def\fWeight%
{bold}\def\fPosture%
{upright}\def\fSize%
{14.4\p@}\def\LineSpacing%
{18.72\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\HeadingLevel%
{3}\def\sbNom%
{10.8\p@}\def\sbMin%
{10.8\p@}\def\sbMax%
{10.8\p@}\def\sbConditional%
{1}\def\saNom%
{2.88\p@}\def\saMin%
{2.88\p@}\def\saMax%
{2.88\p@}\def\saConditional%
{1}\def\KeepWithNext%
{1}}2.6. \Node%
{\def\Element%
{134}\def\ProcessingMode%
{title-sosofo-mode}}PigeonDeliver and core dumps\endNode{}\endPar{}\endSeq{}\Node%
{\def\Element%
{134}}\endNode{}\Node%
{\def\Element%
{135}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  A great effort has been taken into making PigeonDeliver
	  save core dumps whenever desired and allowed.
	\endPar{}\endNode{}\Node%
{\def\Element%
{136}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  Depending on the system being used and its own security
	  infrastructre, and considering that PigeonDeliver may be 
	  made of suid processes and that changes of euid and egid 
	  are quite frequent, the core dump may or may not be saved
	  in case of abnormal termination.
	\endPar{}\endNode{}\Node%
{\def\Element%
{137}}\Par%
{\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Quadding%
{start}\def\Hyphenate%
{0}\def\Language%
{EN}\def\sbNom%
{20\p@}\def\sbMin%
{20\p@}\def\sbMax%
{20\p@}\def\sbConditional%
{1}\def\saNom%
{1.25\p@}\def\saMin%
{1.25\p@}\def\saMax%
{1.25\p@}\def\saConditional%
{1}}
	  If you are using linux, both pctrl and setrlimit are called
	  whenever deemed necessary to force core creation. However,
	  in order to have a useful name for your core dump file, we
	  strongly suggest you to add something like:
	  \Node%
{\def\Element%
{138}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}
echo "\%h.\%p.\%s.\%e.\%t.crash" >\/ /proc/sys/kernel/core\char95{}pattern
\endPar{}\endNode{}
	to your init files, or something like:
\Node%
{\def\Element%
{139}}\Par%
{\def\fSize%
{9\p@}\def\LineSpacing%
{11.7\p@}\def\LineSpacingFactor%
{0}\def\StartIndent%
{48\p@}\def\StartIndentFactor%
{0}\def\fFamName{Courier-New}\def\fWeight%
{medium}\def\fPosture%
{upright}\def\FirstLineStartIndent%
{0\p@}\def\FirstLineStartIndentFactor%
{0}\def\Lines%
{asis}\def\InputWhitespaceTreatment%
{preserve}\def\sbNom%
{10\p@}\def\sbMin%
{10\p@}\def\sbMax%
{10\p@}\def\sbConditional%
{1}\def\saNom%
{10\p@}\def\saMin%
{10\p@}\def\saMax%
{10\p@}\def\saConditional%
{1}}
kernel.core\char95{}pattern = \%h.\%p.\%s.\%e.\%t.crash
\endPar{}\endNode{}
	into your sysctl.conf file.
	\endPar{}\endNode{}\endSeq{}\endDisplayGroup{}\endNode{}\endSeq{}\endDisplayGroup{}\endNode{}\endSpS{}\endSeq{}\endNode{}\endNode{}\endSeq{}\endFOT{}