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

<para
>C ja C++ programmeerimise jaoks sisaldab &kdevelop; 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 &kdevelop; kasutab <application
>GDB</application
>-d, mistõttu &kdevelop;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
>kdevelop/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 &kdevelop; 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 &kdevelop; 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 -->
