# L'interface du débogueur

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 gdb de &GNU; via un tube. Le débogueur peut être démarré de plusieurs manières :

- Avec Déboguer Démarrer, le programme principal de votre projet est chargé dans le débogueur.

- À l'aide de Déboguer Démarrer (autre) Examiner un fichier « core ». 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 à ulimit(1)). C'est utile pour l'analyse post mortem d'un programme.

- Avec Déboguer Démarrer (autre) Attacher au processus, 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.

- 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 Options du compilateur. 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.

L'interface du débogueur offre plusieurs vues dans le processus :

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

Variables

- 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 `main()`.

  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 Ajouter, soit en appuyant sur Entrée quand l'élément Surveiller est sélectionné. Elles peuvent être supprimées à nouveau via le menu contexuel.

Pile principale

- (... à écrire ...)

Points d'arrêt

- Cette fenêtre vous permet de voir et de manipuler les points d'arrêt. Souvenez-vous que, comme &kdevelop; utilise GDB, pour comprendre pleinement les fonctionnalités de débogage de &kdevelop;, vous devriez avoir quelques notions sur le GDB.

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

  Sur le bord gauche, la fenêtre comporte des boutons pour :

  - Ajouter un point d'arrêt vide

  - Modifier le point d'arrêt sélectionné

  - Supprimer le point d'arrêt sélectionné

  - Supprimer tous les points d'arrêt

  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 :

  1. Case à cocher de sélection

  2. Type : un parmi : non valable, Fichier : ligne, Point de surveillance, Adresse, Fonction

  3. État. Les valeurs sont :

     - Active

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

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

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

  4. En attente (effacer)

  5. En attente (modifier)

  6. Emplacement dans le nom de fichier du format : numéro de ligne

  7. Condition

  8. Ignorer le compteur : si c'est un nombre `COUNT` supérieur à zéro, les prochaines `COUNT` 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, gdb ne prend aucune mesure.

  9. Trouvés : compte combien de fois un point d'arrêt a été trouvé.

Désassembleur

- (... à écrire ...)

## Définition des points d'arrêt

(... à écrire ...)

## Options

Afficher les noms désassemblés

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

  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.

Essayer de définir des points d'arrêt au chargement d'une bibliothèque

- Le backend du débogueur gdb 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 `dlopen(3)`), 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 gdb notifie qu'une bibliothèque est partagée, &kdevelop; essaie de définir les points d'arrêt en attente.

Afficher la barre d'outils flottante

- (... à écrire ...)