<chapter id="debugger">
<title>Siluriliides</title>
<indexterm zone="debugger"><primary>silur</primary></indexterm>

<para>C ja C++ programmeerimise jaoks sisaldab &tdevelop; seesmist, otseselt redaktoriga põimitud silurit. Tehniliselt kujutab see endast &GNU; siluri <application>gdb</application> kasutajaliidest. Siluri saab käivitada mitmel moel: </para>

<itemizedlist>
<listitem>
<para>Menüükäsuga <menuchoice><guimenu>Silumine</guimenu><guimenuitem>Käivita</guimenuitem></menuchoice> laetakse sinu projekti põhiprogramm silurisse. </para>
</listitem>

<listitem>
<para>Menüükäsuga <menuchoice><guimenu>Silumine</guimenu> <guimenuitem>Käivita (muu)</guimenuitem> <guimenuitem>Uuri core-faili</guimenuitem></menuchoice> saab laadida mällu core-faili, mille loob operatsioonisüsteemi kernel, kui programmi tabab krahh (core-faili tekitamine võib olla küll sinu süsteemis välja lülitatud, vaata <application>ulimit(1)</application>). Sellest on abi programmi nii-öelda surmajärgseks uurimiseks. </para>
</listitem>

<listitem>
<para>Menüükäsuga <menuchoice><guimenu>Silumine</guimenu> <guimenuitem>Käivita (muu)</guimenuitem> <guimenuitem>Seonda protsessiga</guimenuitem></menuchoice> saab siluri välja kutsuga juba töötava rakenduse jaoks. Sulle näidatakse protsesside nimekirja, kus saad valida protsessi, mille silur peab enda hooleks võtma. </para>
</listitem>

<listitem>
<para>Pane tähele, et silumine on võimalik ainult siis, kui projekt on kompileeritud silumisinfot lubades. Selle saab sisse lülitada dialoogis <guibutton>Kompilaatori seadistused</guibutton>. Kui see valik on sisse lülitatud, tekitab kompilaator lisaandmed, mis lubavad siluril siduda failinimed ja reanumbrid käivitatava faili aadressidega. </para>
</listitem>
</itemizedlist>

<para>Siluriliides pakub mitut vaadet protsessi <quote>sisse</quote>: </para>

<para>Kui üritad siluda ilma silumisinfota projekti, näed olekuribal teadet <computeroutput>No source...</computeroutput> Kui üritad määrata katkestuspunkti, näed katkestuspunktide aknas (vaata allpool) teadet <computeroutput>Ootel (lisa)</computeroutput>. </para>

<variablelist>
<varlistentry>
<term>Muutujad</term>
<listitem>
<indexterm zone="debugger"><primary>muutujate jälgimine</primary></indexterm>
<para>See aken näitab kõigi kohalike muutujate väärtusi programmi täitmise hetkeasukohas. See hõlmab muutujaid kogu väljakutsete pinus, &ie; funktsiooni, kus protsess katsestati, funktsiooni, mis selle funktsiooni välja kutsus, ja nii edasi kuni funktsioonini <function>main()</function>. </para>

<para>Muutujate teine haru sisaldab jälgitavaid muutujaid. Seda, milliseid muutujaid siin näeb, saad ise määrata. Jälgida saab nii kohalikke kui ka globaalseid muutujaid. Muutujaid saab lisada kas klõpsuga nupule <guibutton>Lisa</guibutton> või vajutades klahvi <keycap>Return</keycap> ajal, mil valitud on mõni element harus <guilabel>Jälgimine</guilabel>. Kontekstimenüüga saab muutujaid ka eemaldada. </para>
</listitem>
</varlistentry>

<varlistentry>
<term>Pinuvaade</term>
<listitem>
<indexterm zone="debugger"><primary>pinuvaade</primary></indexterm>
<para>(... veel kirjutamata ...) </para>
</listitem>
</varlistentry>

<varlistentry>
<term>Katkestuspunktid</term>
<listitem>
<indexterm zone="debugger"><primary>katkestuspunktid</primary></indexterm>
<para>See aken võimaldab näha katkestuspunkte ja nendega üht-teist ette võtta. Pane tähele, et &tdevelop; kasutab <application>GDB</application>-d, mistõttu &tdevelop;i silumisvõimaluste täielikuks mõistmiseks oleks kasulik omada mingit ülevaadet <ulink url="http://www.gnu.org/software/gdb">GDB-st</ulink>. </para>

<para>Kui soovid näha lähtekoodi, siis katkestuspunktid on defineeritud failis <filename>tdevelop/languages/cpp/debugger/breakpoint.h</filename>. </para>

<para>Akna vasakus servas on mõned nupud:</para>

<itemizedlist>
<listitem><para>Lisa tühi katkestuspunkt</para></listitem>
<listitem><para>Muuda valitud katkestuspunkti</para></listitem>
 <listitem><para>Kustuta valitud katkestuspunkt</para></listitem>
<listitem><para>Eemalda kõik katkestuspunktid</para></listitem>
</itemizedlist>

<para>Akna põhiosa koosneb seitsme veeruga tabelist. Iga tabeli rida tähistab katkestuspunkti. Veerud on järgmised:</para>

<orderedlist>
<listitem><para>Valikukast</para></listitem>
<listitem><para>Tüüp: kas vigane, fail:rida, jälgimispunkt, aadress või funktsioon</para></listitem>
<listitem><para>Olek. Väärtused on järgmised:</para>
<itemizedlist>
  <listitem><para>Aktiivne</para></listitem>
  <listitem><para>Keelatud: iga katkestuspunkt võib olla <quote>lubatud</quote> või <quote>keelatud</quote>; viimasel juhul ei mõjuta see sinu programmi, kuni sa seda taas ei aktiveeri.</para></listitem>
  <listitem><para>Ootel (lisa): katkestuspunkt märgitakse nii juhul, kui silumisinfot pole saadaval. GDB info-lehekülg selgitab seda nii: <blockquote><para>Kui määratud katkestuspunkti asukohta ei leita, võib tegemist olla asjaoluga, et asukoht paikneb jagatud teegis, mis pole veel laaditud. Sel juhul võib GDB luua spetsiaalse katkestuspunkti (nimetatakse <quote>ootel katkestuspunktiks</quote>), mis üritab end lahendada tulevikus, kui laaditakse vajalik jagatud teek.</para></blockquote> </para></listitem>
</itemizedlist>
</listitem>
<listitem><para>Ootel (puhasta)</para></listitem>
<listitem><para>Ootel (muuda)</para></listitem>
<listitem><para>Asukoht kujul failinimi:reanumber</para></listitem>
<listitem><para>Tingimus</para></listitem>
<listitem><para>Ignoreerimiste arv: kui arv <varname>COUNT</varname> on suurem kui null, siis järgmisel <varname>COUNT</varname> korral, mil katkestuspunktini jõutakse, ei katkestada programmi täitmist; <application>gdb</application> ei tee sel juhul muud, kui ainult kahandab ignoreerimiste arvu.</para></listitem>
<listitem><para>Päringuid: näitab, mitu korda on katkestuspunktini jõutud.</para></listitem>
</orderedlist>


</listitem>
</varlistentry>

<varlistentry>
<term>Pöördtransleerimine</term>
<listitem>
<indexterm zone="debugger"><primary>pöördtransleerimine</primary></indexterm>
<para>(... veel kirjutamata ...)</para>

</listitem>
</varlistentry>
</variablelist>


<sect1 id="settingbreakpoints">
<title>Katkestuspunktide määramine</title>

<para>(... veel kirjutamata ...) </para>

</sect1> <!-- settingbreakpoints -->

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->

<sect1 id ="debuggeroptions">
<title>Seadistused</title>

<variablelist>
<varlistentry>
<term>Segatud nimede näitamine</term>
<listitem>
<indexterm zone="debugger"><primary>nimede segamine</primary></indexterm>
<indexterm zone="debugger"><primary>segamine</primary><secondary>nimi</secondary></indexterm>

<para>C++ korral on funktsioonide nimed käivitatavas failis <quote>segatud</quote>, &ie; funktsioonide nimed sisaldavad infot argumentide tüüpide kohta. See on vajalik funktsioonide ülelaadimise toetuseks. Segamisalgoritm pole standardiseeritud ning on erinevates &GNU; C++ kompilaatorites erinev. </para>

<para>Pöördassembleerimise aknas näidatakse tavaliselt segamata nimesid, nii et funktsioonide signatuurid on samasugused nagu lähtekoodis, et neid oleks hõlpus lugeda. Aga soovi korral võid lasta näidata ka segatud nimesid. </para>
</listitem>
</varlistentry>

<varlistentry>
<term>Teegi laadimiselpüütakse seada katkestuspunkte</term>
<listitem>
<indexterm zone="debugger"><primary>laisad katkestuspunktid</primary></indexterm>
<indexterm zone="debugger"><primary>katkestuspunktid</primary><secondary>laisk</secondary></indexterm>

<para>Siluri taustaprogramm <application>gdb</application> ei luba seada katkestuspunkte koodis, mis ei ole parajasti laaditud. Suure moodulite arvuga rakenduses, kus kood laaditakse tihtipeale ainult nõudmisel pluginana (kasutades libc funktsiooni <function>dlopen(3)</function>), ei pruugi see just mugav olla. Seepörast toetab &tdevelop; omalt poolt katkestuspunkte jagatud teekides. Selle valiku sisselülitamisel saab seada katkestuspunkte teekides, mis ei ole laetud. Kui seejärel <application>gdb</application> tuvastab, et teek on laaditud, püüab &tdevelop; seada ootel katkestuspunktid. </para>
</listitem>
</varlistentry>

<varlistentry>
<term>Liikuva tööriistariba lubamine</term>
<listitem>
<indexterm zone="debugger"><primary>siluririba</primary></indexterm>
<indexterm zone="debugger"><primary>tööriistariba</primary><secondary>silur</secondary></indexterm>

<para>(... veel kirjutamata ...) </para>
</listitem>
</varlistentry>
</variablelist>

</sect1> <!-- debuggeroptions -->

</chapter> <!-- debugger -->
