<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 -->