<chapter id="debugger">
<title
>L'interface du débogueur</title>
<indexterm zone="debugger"
><primary
>débogueur</primary
></indexterm>

<para
>Pour le C et le C++, &kdevelop; contient un débogueur interne directement intégré avec l'éditeur. Techniquement, il est implémenté comme une interface qui utilise le débogueur <application
>gdb</application
> de &GNU; via un tube. Le débogueur peut être démarré de plusieurs manières : </para>

<itemizedlist>
<listitem>
<para
>Avec <menuchoice
><guimenu
>Déboguer</guimenu
><guimenuitem
>Démarrer</guimenuitem
></menuchoice
>, le programme principal de votre projet est chargé dans le débogueur. </para>
</listitem>

<listitem>
<para
>À l'aide de <menuchoice
><guimenu
>Déboguer</guimenu
> <guimenuitem
>Démarrer (autre)</guimenuitem
> <guimenuitem
>Examiner un fichier « core »</guimenuitem
></menuchoice
>. Vous chargez un fichier « core » en mémoire, qui est généré par le noyau du système d'exploitation quand le programme a planté (la génération des fichiers « core » risque d'être hors service sur votre système, reportez-vous à <application
>ulimit(1)</application
>). C'est utile pour l'analyse post mortem d'un programme. </para>
</listitem>

<listitem>
<para
>Avec <menuchoice
><guimenu
>Déboguer</guimenu
> <guimenuitem
>Démarrer (autre)</guimenuitem
> <guimenuitem
>Attacher au processus</guimenuitem
></menuchoice
>, vous invoquez le débogueur sur un programme déjà en cours d'exécution. Vous voyez apparaître une liste de processus dans laquelle vous pouvez sélectionner le processus que le débogueur devrait superviser. </para>
</listitem>

<listitem>
<para
>Notez que déboguer n'est possible que si votre projet a été compilé qu'avec l'activation des informations de débogage compilées. Cette fonction peut être activée dans la boîte de dialogue <guibutton
>Options du compilateur</guibutton
>. Quand cette option est cochée, le compilateur génère des données additionnelles qui permettent au débogueur d'associer des noms de fichiers et des numéros de ligne avec des adresses dans l'exécutable. </para>
</listitem>
</itemizedlist>

<para
>L'interface du débogueur offre plusieurs vues <quote
>dans</quote
> le processus : </para>

<para
>Si vous essayez de déboguer un projet sans dégoguer les informations, vous obtenez le message <computeroutput
>Pas de source...</computeroutput
> dans la barre d'état.Si vous essayez de définir un point d'arrêt, il s'affichera sous la forme <computeroutput
>En attente (ajouter)</computeroutput
> dans la fenêtre du point d'arrêt (voir ci-dessous). </para>

<variablelist>
<varlistentry>
<term
>Variables</term>
<listitem>
<indexterm zone="debugger"
><primary
>variables de surveillance</primary
></indexterm>
<para
>Cette fenêtre répertorie les valeurs de toutes les variables locales au stade d'exécution actuel du programme. Elle couvre les variables dans la totalité de la pile d'appels, &cad; la fonction où le processus a été interrompu, la fonction qui a appelé cette fonction, et ainsi de suite, jusqu'à la fonction <function
>main()</function
>. </para>

<para
>Une autre branche dans les variables contient les variables de surveillance. Vous pouvez configurer vous-même les variables qui sont affichées ici. Les variables locales et globales peuvent être surveillées. Vous pouvez ajouter des variables soit en cliquant sur le bouton <guibutton
>Ajouter</guibutton
>, soit en appuyant sur <keycap
>Entrée</keycap
> quand l'élément <guilabel
>Surveiller</guilabel
> est sélectionné. Elles peuvent être supprimées à nouveau via le menu contexuel. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Pile principale</term>
<listitem>
<indexterm zone="debugger"
><primary
>pile principale</primary
></indexterm>
<para
>(... à écrire ...) </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Points d'arrêt</term>
<listitem>
<indexterm zone="debugger"
><primary
>points d'arrêt</primary
></indexterm>
<para
>Cette fenêtre vous permet de voir et de manipuler les points d'arrêt. Souvenez-vous que, comme &kdevelop; utilise <application
>GDB</application
>, pour comprendre pleinement les fonctionnalités de débogage de &kdevelop;, vous devriez avoir quelques notions sur le <ulink url="http://www.gnu.org/software/gdb"
>GDB</ulink
>. </para>

<para
>Si vous souhaitez examiner le code source, les points d'arrêt sont définis dans <filename
>kdevelop/languages/cpp/debugger/breakpoint.h</filename
>. </para>

<para
>Sur le bord gauche, la fenêtre comporte des boutons pour :</para>

<itemizedlist>
<listitem
><para
>Ajouter un point d'arrêt vide</para
></listitem>
<listitem
><para
>Modifier le point d'arrêt sélectionné</para
></listitem>
 <listitem
><para
>Supprimer le point d'arrêt sélectionné</para
></listitem>
<listitem
><para
>Supprimer tous les points d'arrêt</para
></listitem>
</itemizedlist>

<para
>La partie principale de la fenêtre est un tableau de 7 colonnes. Chaque ligne du tableau est un point d'arrêt. Les colonnes sont :</para>

<orderedlist>
<listitem
><para
>Case à cocher de sélection</para
></listitem>
<listitem
><para
>Type : un parmi : non valable, Fichier : ligne, Point de surveillance, Adresse, Fonction</para
></listitem>
<listitem
><para
>État. Les valeurs sont :</para>
<itemizedlist>
  <listitem
><para
>Active</para
></listitem>
  <listitem
><para
>Désactivé : chaque point d'arrêt peut être « activé » ou « désactivé ». Si désactivé, il n'a pas aucun effet su votre programme jusqu'à ce que vous l'activiez à nouveau.</para
></listitem>
  <listitem
><para
>En attente (ajouter) : un point d'arrêt est marqué comme suit si aucune information de débogage n'est disponible. D'après la page info de GDB : <blockquote
><para
>Si un emplacement de point d'arrêt spécifié ne peut être trouvé, cela peut être dû au fait que l'emplacement est dans une bibliothèque partagée qui est encore à charger. Dans un tel cas, vous pouvez être amené à ce que GDB crée un point d'arrêt spécial (connu sous le nom « point d'arrêt en attente »), qui tente de se résoudre lui-même dans le futur dès qu'une bibliothèque partagée appropriée est chargée.</para
> </blockquote
> </para
></listitem>
</itemizedlist>
</listitem>
<listitem
><para
>En attente (effacer)</para
></listitem>
<listitem
><para
>En attente (modifier)</para
></listitem>
<listitem
><para
>Emplacement dans le nom de fichier du format : numéro de ligne</para
></listitem>
<listitem
><para
>Condition</para
></listitem>
<listitem
><para
>Ignorer le compteur : si c'est un nombre <varname
>COUNT</varname
> supérieur à zéro, les prochaines <varname
>COUNT</varname
> fois où le point d'arrêt est atteint, l'exécution de votre programme ne s'arrête pas ; autre que pour décrémenter l'ignorance du compteur, <application
>gdb</application
> ne prend aucune mesure.</para
></listitem>
<listitem
><para
>Trouvés : compte combien de fois un point d'arrêt a été trouvé.</para
></listitem>
</orderedlist>


</listitem>
</varlistentry>

<varlistentry>
<term
>Désassembleur</term>
<listitem>
<indexterm zone="debugger"
><primary
>désassembleur</primary
></indexterm>
<para
>(... à écrire ...)</para>

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


<sect1 id="settingbreakpoints">
<title
>Définition des points d'arrêt</title>

<para
>(... à écrire ...) </para>

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

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

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

<variablelist>
<varlistentry>
<term
>Afficher les noms désassemblés</term>
<listitem>
<indexterm zone="debugger"
><primary
>désassemblage des noms</primary
></indexterm>
<indexterm zone="debugger"
><primary
>désassemblage</primary
><secondary
>nom</secondary
></indexterm>

<para
>En C++, les noms de fonction dans l'exécutable sont « désassemblés », &cad; qu'ils contiennent des informations sur les types d'arguments. C'est nécessaire pour pouvoir gérer la surcharge des fonctions. L'algorithme de désassemblage n'est pas standardisé et diffère même entre les différentes versions du compilateur C++ de &GNU;. </para>

<para
>Dans la fenêtre de désassemblage, normalement, comme les noms désassemblés sont affichés, les signatures des fonctions apparaissent de la même manière que dans le code source et sont donc facilement lisibles. Autrement, vous pouvez décider de voir les noms désassemblés. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Essayer de définir des points d'arrêt au chargement d'une bibliothèque</term>
<listitem>
<indexterm zone="debugger"
><primary
>points d'arrêt paresseux</primary
></indexterm>
<indexterm zone="debugger"
><primary
>points d'arrêt</primary
><secondary
>paresseux</secondary
></indexterm>

<para
>Le backend du débogueur <application
>gdb</application
> ne permet pas de définir des points d'arrêt à l'intérieur du code qui n'est pas actuellement chargé. Dans une application hautement modulaire, où souvent le code n'est chargé qu'à la demande sous la forme d'un module externe (à l'aide de la fonction libc <function
>dlopen(3)</function
>), ce peut être incommode. Par conséquent, &kdevelop; fournit sa propre prise en charge pour les points d'arrêt dans les bibliothèques partagées. Si vous cochez cette option, elle vous permet de définir des points d'arrêt dans les bibliothèques qui ne sont pas chargées. Puis, chaque fois que <application
>gdb</application
> notifie qu'une bibliothèque est partagée, &kdevelop; essaie de définir les points d'arrêt en attente. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Afficher la barre d'outils flottante</term>
<listitem>
<indexterm zone="debugger"
><primary
>barre d'outils du débogueur</primary
></indexterm>
<indexterm zone="debugger"
><primary
>barre d'outils</primary
><secondary
>débogueur</secondary
></indexterm>

<para
>(... à écrire ...) </para>
</listitem>
</varlistentry>
</variablelist>

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

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