<chapter id="debugger"> <title >Fejlsøgergrænsefladen</title> <indexterm zone="debugger" ><primary >fejlsøgere</primary ></indexterm> <para >&kdevelop; indeholder en intern fejlsøger for C og C++, som er direkte integreret med editoren. Teknisk set er den implementeret som en grænseflade som bruger den flytbare &GNU;-fejlsøger <application >gdb</application > via en pipe. Fejlsøgeren kan startes på flere måder: </para> <itemizedlist> <listitem> <para >Hovedprogrammet i projektet indlæses i fejlsøgeren med <menuchoice ><guimenu >Fejlsøg</guimenu ><guimenuitem >Start</guimenuitem ></menuchoice >. </para> </listitem> <listitem> <para >Ved at bruge <menuchoice ><guimenu >Fejlsøg</guimenu > <guimenuitem >Start (andet)</guimenuitem > <guimenuitem >Undersøg hukommelsesdump</guimenuitem ></menuchoice >, indlæser du et hukommelsesdump til hukommelsen, som blev lavet af operativsystemets kerne da programmet brød sammen. (At lave hukommelsesdump kan være slået fra på systemet, se <application >ulimit(1)</application >). Dette er nyttigt for en post-mortem analyse af et program. </para> </listitem> <listitem> <para >Du starter fejlsøgeren for et program som allerede kører med <menuchoice ><guimenu >Fejlsøg</guimenu ><guimenuitem >Start (andet)</guimenuitem > <guimenuitem >Forbind til proces</guimenuitem ></menuchoice >. En procesliste vises hvor du kan vælge processen som fejlsøgeren skal overtage. </para> </listitem> <listitem> <para >Bemærk at fejlsøgning kun er mulig hvis projektet er kompileret med fejlsøgningsinformation aktiveret. Den kan aktiveres i dialogen <guibutton >Oversætterindstillinger</guibutton >. Når dette er aktiveret, laver oversætteren yderligere informationer som lader fejlsøgeren associere filnavne og linjenumre med adresser i det kørbare program. </para> </listitem> </itemizedlist> <para >Grænsefladen til fejlsøgeren tilbyder flere visninger <quote >ind i</quote > processen: </para> <para >Hvis du forsøger at fejlsøge et projekt uden fejlsøgningsinformation, får du meddelelsen <computeroutput >Ingen kildekode...</computeroutput > i statuslinjen. Hvis du forsøger at sætte stoppunkter, vises de som <computeroutput >Hvilende (tilføj)</computeroutput > i stoppunktsvinduet (se nedenfor). </para> <variablelist> <varlistentry> <term >Variabler</term> <listitem> <indexterm zone="debugger" ><primary >overvågningsvariabler</primary ></indexterm> <para >Dette vindue viser værdier for alle lokale variabler på det nuværende sted i programmet. Det dækker variablerne i oversætterens kaldstak, &ie; funktionen hvor processen blev afbrudt, funktionen som kaldte denne funktionen, og så videre hele vejen til funktionen <function >main()</function >. </para> <para >En anden gren i variabelvinduet indeholder overvågningsvariabler. Du kan selv indstille hvilke variabler som ses her. Både lokale og globale variabler kan overvåges. Du kan enten tilføje en variabel ved at klikke på knappen <guibutton >Tilføj</guibutton > eller trykke på returtasten når punktet <keycap >Overvåg</keycap > er markeret. Variablerne kan fjernes igen med den sammenhængsafhængige menuen. </para> </listitem> </varlistentry> <varlistentry> <term >Rammestak</term> <listitem> <indexterm zone="debugger" ><primary >rammestak</primary ></indexterm> <para >(... endnu ikke skrevet ...) </para> </listitem> </varlistentry> <varlistentry> <term >Stoppunkter</term> <listitem> <indexterm zone="debugger" ><primary >stoppunkter</primary ></indexterm> <para >Vinduet lader dig se og behandle stoppunkterne. Husk at &kdevelop; bruger <application >GDB</application >, så for at forstå &kdevelop;s fejlsøgningsfunktioner fuldstændigt, skal du vide en lille smule om <ulink url="http://www.gnu.org/software/gdb" >GDB</ulink >. </para> <para >Hvis du vil kigge på kildekoden, defineres stoppunkter i <filename >kdevelop/languages/cpp/debugger/breakpoint.h</filename >. </para> <para >I venstre kant har vinduet knapper for at:</para> <itemizedlist> <listitem ><para >Tilføj et tomt breakpoint</para ></listitem> <listitem ><para >Redigér det markerede stoppunkt</para ></listitem> <listitem ><para >Sletter det valgte breakpoint</para ></listitem> <listitem ><para >Fjern alle breakpoints</para ></listitem> </itemizedlist> <para >Hoveddelen af vinduet er en tabel med syv søjler. Hver linje i tabellen er et stoppunkt. Søjlerne er:</para> <orderedlist> <listitem ><para >Markeringsafkrydsningsfelt</para ></listitem> <listitem ><para >Type: en af: Ugyldig, Fil:Linje, Overvågningspunkt, Adresse, Funktion</para ></listitem> <listitem ><para >Status. Værdierne er:</para> <itemizedlist> <listitem ><para >Aktiv</para ></listitem> <listitem ><para >Deaktiveret: Hvert stoppunkt kan <quote >aktiveres</quote > eller <quote >deaktiveres</quote >. Hvis det er deaktiveret har det ingen effekt på programmet indtil det aktiveres igen.</para ></listitem> <listitem ><para >Hvilende (tilføj): En stoppunkt er markeret sådan her hvis ingen fejlsøgningsinformation er tilgængelig. Fra GDB's informationsside: <blockquote ><para >Hvis et specificeret stoppunktssted ikke kan findes, kan det skyldes det faktum at stedet er i et delt bibliotek som endnu ikke er indlæst. I et sådant tilfælde, kan du ville at GDB laver et specielt stoppunkt (kendt som et <quote >hvilende stoppunkt</quote >) som forsøger at løse sig selv op i fremtiden når et passende delt bibliotek indlæses.</para ></blockquote > </para ></listitem> </itemizedlist> </listitem> <listitem ><para >Hvilende (rydning)</para ></listitem> <listitem ><para >Hvilende (ændring)</para ></listitem> <listitem ><para >Sted på formatet filnavn:linjenummer</para ></listitem> <listitem ><para >Betingelse</para ></listitem> <listitem ><para >Ignorér antal: Hvis det er et tal <varname >ANTAL</varname > større end nul, stoppes programmets kørsel ikke før følgende <varname >ANTAL</varname > gange som stoppunktet nås. Udover at mindske antallet at ignorere, udfører <application >gdb</application > ingen handling.</para ></listitem> <listitem ><para >Træffere: Regner ud hvor mange gange et stoppunkt er truffet.</para ></listitem> </orderedlist> </listitem> </varlistentry> <varlistentry> <term >Vis assemblerkode</term> <listitem> <indexterm zone="debugger" ><primary >vis assemblerkode</primary ></indexterm> <para >(... endnu ikke skrevet ...)</para> </listitem> </varlistentry> </variablelist> <sect1 id="settingbreakpoints"> <title >Sæt stoppunkter</title> <para >(... endnu ikke skrevet ...) </para> </sect1 > <!-- settingbreakpoints --> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <sect1 id ="debuggeroptions"> <title >Tilvalg</title> <variablelist> <varlistentry> <term >Vis behandlede navne</term> <listitem> <indexterm zone="debugger" ><primary >navnebehandling</primary ></indexterm> <indexterm zone="debugger" ><primary >behandling</primary ><secondary >navn</secondary ></indexterm> <para >Funktionsnavne i det kørbare program er <quote >behandlede</quote > for C++, &ie; funktionsnavnet indeholder information om argumenternes typer. Dette er nødvendigt for at støtte overbelastede funktioner. Behandlingsalgoritmen er ikke standardiseret, og adskiller sig til og med mellem forskellige udgaver af &GNU;'s C++ oversætter. </para> <para >I assemblerkodevinduet vises normalt ubehandlede navne, så funktionssignaturer ligner udseendet i kildekoden, og er let læsbare. Alternativt, kan du vælge at se behandlede navne. </para> </listitem> </varlistentry> <varlistentry> <term >Forsøg at sætte stoppunkter når biblioteker indlæses</term> <listitem> <indexterm zone="debugger" ><primary >dovne stoppunkter</primary ></indexterm> <indexterm zone="debugger" ><primary >stoppunkter</primary ><secondary >doven</secondary ></indexterm> <para >Fejlsøgerens baggrundsprogram <application >gdb</application > tillader ikke at stoppunkter sættes i kode som ikke for øjeblikket er indlæst. I et rigtigt modulært program, hvor kode ofte kun indlæses efter behov såsom plugin (med brug af C-bibliotekets funktion <function >dlopen(3)</function >), kan dette være besværligt. Derfor håndterer &kdevelop; selv støtte for stoppunkter i delte biblioteker. Hvis du aktiverer dette, kan du sætte stoppunkter i biblioteker som ikke er indlæst. Derefter, så snart <application >gdb</application > fortæller at et bibliotek er indlæst, forsøger &kdevelop; at sætte de hvilende stoppunkter. </para> </listitem> </varlistentry> <varlistentry> <term >Aktivér flydende værktøjslinje</term> <listitem> <indexterm zone="debugger" ><primary >fejlsøgningsværktøjslinje</primary ></indexterm> <indexterm zone="debugger" ><primary >værktøjslinje</primary ><secondary >fejlsøger</secondary ></indexterm> <para >(... endnu ikke skrevet ...) </para> </listitem> </varlistentry> </variablelist> </sect1 > <!-- debuggeroptions --> </chapter > <!-- debugger -->