<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>gdb</title><revhistory><revision><revnumber>5</revnumber><date>2013-05-08 10:11:37</date><authorinitials>ZioPRoTo</authorinitials></revision><revision><revnumber>4</revnumber><date>2010-09-15 13:00:21</date><authorinitials>ZioPRoTo</authorinitials></revision><revision><revnumber>3</revnumber><date>2008-03-25 16:13:42</date><authorinitials>ZioPRoTo</authorinitials></revision><revision><revnumber>2</revnumber><date>2008-03-25 16:00:22</date><authorinitials>ZioPRoTo</authorinitials></revision><revision><revnumber>1</revnumber><date>2008-03-25 15:32:48</date><authorinitials>ZioPRoTo</authorinitials></revision></revhistory></articleinfo><section><title>Note su GDB</title><para>In questa pagina di Wiki ci sono appunti disordinati su gdb <inlinemediaobject><imageobject><imagedata depth="16" fileref="http://wiki.ninux.org//moin_static197/ninuxtheme02/img/smile.png" width="16"/></imageobject><textobject><phrase>:)</phrase></textobject></inlinemediaobject> Happy debugging <inlinemediaobject><imageobject><imagedata depth="16" fileref="http://wiki.ninux.org//moin_static197/ninuxtheme02/img/smile.png" width="16"/></imageobject><textobject><phrase>:)</phrase></textobject></inlinemediaobject> </para><section><title>Installare GDB</title><para>Meglio installare cgdb, che mentre usate il debug vi fa vedere il codice splittando la shell a metà. Poi è tutto uguale solo che dovete lanciare cgdb invece di gdb. </para></section><section><title>Compilare</title><para>Usate sempre l'opzione <code>-g</code> nelle vostre CFLAGS se poi volete usare gdb per fare il debug </para></section><section><title>Lanciare il programma</title><screen><![CDATA[gdb --args file argomento1 argomento2 argomento3]]></screen></section><section><title>Esecuzione</title><para>Prima di eseguire il debug può essere utile specificare dei breakpoints </para><screen><![CDATA[break nomefile:riga]]></screen><para>di default gdb si fermera' a qualsiasi segnale. Se vogliamo ad esempio ignorare SIGPIPE facciamo </para><screen><![CDATA[handle SIGPIPE nostop]]></screen><para>Fatto questo mandiamo in esecuzione: </para><screen><![CDATA[run]]></screen><para>Se vogliamo mettere un breakpoint condizionale, ad esempio dopo primo primo break </para><screen><![CDATA[condition 1 Scheduler::instance().clock() > 20]]></screen><para>dove 1 è il numero del breakpoint e <code>Scheduler::instance().clock()</code> è il nome della variabile </para><para>A questo punto gdb si ferma al primo breakpoint che abbiamo impostato oppure al primo problema che incontra </para><itemizedlist><listitem><para>Per andare avanti usiamo il comando <code>next</code> </para></listitem><listitem><para>Per entrare dentro una funzione usiamo <code>step</code> </para></listitem><listitem><para>Per vedere qualche è il problema usiamo <code>backtrace</code> </para></listitem><listitem><para>Per stampare il contenuto di una variabile usiamo <code>print nomevar</code> </para></listitem><listitem><para>Per far continuare l'esecuzione regolare del programma usiamo <code>continue</code> </para></listitem></itemizedlist></section></section></article>