Objectives
After completing this lesson, you will be able to:
- Saisissez le mode de débogage.
- Contrôlez l'exécution du code.
- Analyser le contenu des objets de données.
Mode de débogage
Regardez cette vidéo pour comprendre le besoin de débogage.
Démarrage du débogueur
Pour déboguer un programme ABAP, vous définissez un point d'arrêt, puis exécutez le programme normalement. Lorsque le programme atteint le point d'arrêt, le système l'interrompt et ouvre la perspective Débogage ABAP dans ADT. Vous pouvez ensuite exécuter chaque instruction suivante individuellement pour voir l'effet qu'elle a sur le programme. Vous pouvez également inspecter le contenu de toutes les variables du programme pour voir si l'une des valeurs est inattendue.
Pour définir ou supprimer un point d'arrêt, cliquez avec le bouton droit de la souris sur la marge gauche de l'éditeur et sélectionnez Basculer point d'arrêt. Vous pouvez également double-cliquer sur la marge de gauche. Notez que le programme doit être activé avant de pouvoir définir des points d'arrêt.
Les points d'arrêt sont propres à l'utilisateur et persistants. Ils restent actifs même après vous être déconnecté d'ADT et de nouveau. Pour empêcher le débogueur de démarrer à un point d'arrêt, vous devez supprimer le point d'arrêt (à l'aide de la fonction Basculer point d'arrêt) ou le désactiver à l'aide de la fonction correspondante dans le menu contextuel.
Remarque
En fonction de vos options de personnalisation, ADT demandera d'abord une confirmation avant d'ouvrir automatiquement la perspective de débogage.
La perspective de débogage dans ADT
Lorsque vous déboguez un programme ABAP à l'aide des outils de développement ABAP, vous utilisez la perspective Déboguer. Il s'agit d'une version personnalisée de la perspective de débogage Eclipse standard qui contient des vues et des fonctions particulièrement importantes pour le débogage.
Examinons quelques éléments importants de la perspective du débogueur.
Comment lancer le débogueur
Contrôle de l'exécution du code
Certaines fonctions de navigation
Une fois le débogage lancé, utilisez les fonctions de navigation pour piloter l'exécution du code.
Voici quelques fonctions de navigation importantes :
- Étape en (F5)
Sélectionnez Étape en ou appuyez sur F5 pour exécuter une seule étape. Utilisez cette fonction pour une analyse étape par étape. Si, par exemple, vous voulez voir quel bloc de code d'une structure de contrôle est réellement exécuté.
- Reprendre (F8)
Sélectionnez Reprendre ou appuyez sur F8 pour exécuter le programme jusqu'au point d'arrêt suivant. Si le débogueur n'atteint plus de points d'arrêt, le programme est exécuté jusqu'à la fin et la session de débogage est interrompue.
- Exécuter à la ligne (Maj+F8)
Sélectionnez Exécuter à la ligne ou appuyez sur Maj+F8 pour exécuter le programme jusqu'à la position actuelle du curseur. Cliquer sur une ligne de code et sélectionner cette fonction est une alternative pratique à la définition d'un point d'arrêt, en sélectionnant Reprendre et en supprimant à nouveau le point d'arrêt.
- Saut à la ligne (Maj+F12)
Sélectionnez Passer à la ligne ou appuyez sur Maj+F12 pour ignorer certaines lignes de code ou pour revenir en arrière à du code déjà exécuté. Cette fonction peut être utile pour simuler ce qui se passerait si un certain morceau de code était supprimé ou pour répéter le débogage un peu de code que vous avez manqué d'analyser la première fois. Gardez à l'esprit qu'il s'agit en fait d'un saut, et non d'une exécution du codage. Lorsque vous revenez en arrière, les modifications apportées aux objets de données ne sont pas annulées.
- Interrompre
Sélectionnez Interrompre si vous avez terminé le débogage et que vous ne voulez pas exécuter le programme restant. La session de débogage se termine immédiatement.
Points d'arrêt spéciaux
Vous avez appris que vous pouvez créer et gérer des points d'arrêt en cliquant sur la marge à gauche de la vue de l'éditeur ABAP. Cela fonctionne également avec la vue de l'éditeur ABAP dans la perspective Débogage.
En outre, vous pouvez passer à la vue Points d'arrêt et y gérer vos points d'arrêt.
Dans la vue Points d'arrêt, vous pouvez également créer des points d'arrêt spéciaux :
- Point d'arrêt de l'instruction
Un point d'arrêt d'instruction n'est pas lié à une ligne de code spécifique mais à une instruction ABAP spécifique. Un point d'arrêt d'instruction sur l'instruction CLEAR, par exemple, provoque l'arrêt du programme dans le débogueur lorsqu'une instruction CLEAR est exécutée, quel que soit l'emplacement de cette instruction.
Pour créer un point d'arrêt d'instruction, ouvrez la liste déroulante dans la barre d'outils de la vue Points d'arrêt et sélectionnez Ajouter Point d'arrêt d'instruction...
- Point d'arrêt d'exception
Un point d'arrêt d'exception est attaché à une exception spécifique. Il entraîne l'arrêt du programme dans le débogueur chaque fois que cette exception particulière est déclenchée, que cette exception soit gérée par le programme ou qu'elle provoque une erreur d'exécution. Pour créer un point d'arrêt d'exception, ouvrez la liste déroulante dans la barre d'outils de la vue Points d'arrêt et sélectionnez Ajouter point d'arrêt d'exception ….
- Point d'arrêt conditionnel
Vous transformez un point d'arrêt en point d'arrêt conditionnel en ajoutant une condition. Si l'exécution du programme atteint un point d'arrêt conditionnel, le programme s'arrête dans le débogueur uniquement si la condition est remplie. Si, par exemple, un point d'arrêt est situé entre DO et ENDDO, le programme s'arrêtera dans le débogueur à chaque itération. Mais si vous ajoutez une condition sy-index > 20, le débogueur ignorera ce point d'arrêt pendant les 20 premières itérations et ne s'arrêtera que dans les itérations suivantes.
Pour ajouter une condition à un point d'arrêt, sélectionnez-la dans la liste des points d'arrêt et saisissez la condition dans la zone Condition. Appuyez sur Entrée pour sauvegarder le point d'arrêt avec la condition.
Points de surveillance
Si une valeur inattendue d'une variable entraîne des problèmes, vous pouvez suivre sa valeur au cours du programme à l'aide d'un point de surveillance.
Regardez cette vidéo pour en savoir plus.
Comment contrôler l'exécution du code
Analyse des objets de données
Afficher contenu des objets de données
Regardez cette vidéo pour savoir comment afficher le contenu des objets de données dans le débogueur.
Afficher contenu des tables internes
Regardez cette vidéo pour savoir comment afficher le contenu des tables internes.
Modification des valeurs des variables
En fonction de vos autorisations, vous pouvez modifier la valeur des variables lors du débogage.
Pour des variables simples, localisez la variable dans la vue Variables, cliquez dessus avec le bouton droit de la souris et sélectionnez Modifier la valeur….
Pour modifier le contenu d'une table interne, nous devons faire la distinction entre la modification de la valeur d'une ligne existante et l'ajout ou la suppression de lignes.
Comme le montre la figure, les fonctions suivantes sont disponibles lorsque vous cliquez avec le bouton droit de la souris dans la vue Table interne ABAP :
- Modifier la valeur…
- Sélectionnez Modifier la valeur… pour modifier le contenu d'une ligne existante.
- Insérer une ligne...
- Sélectionnez Insérer ligne… pour ajouter une nouvelle ligne. Vous pouvez décider d'ajouter la nouvelle ligne ou de l'insérer à l'emplacement sélectionné.
- Supprimer lignes sélectionnées
- Sélectionnez Supprimer lignes sélectionnées pour supprimer les lignes sélectionnées avant de cliquer avec le bouton droit de la souris. Pour sélectionner une ligne, cliquez dessus avec le bouton gauche de la souris. Pour sélectionner plusieurs lignes, maintenez la touche Ctrl ou Maj enfoncée lorsque vous cliquez avec le bouton gauche de la souris sur des lignes supplémentaires.
- Supprimer les lignes...
- Sélectionnez Supprimer lignes… pour supprimer un plus grand nombre de lignes, voire toutes les lignes. Le système vous demande le numéro de la ligne de début et de la ligne de fin que vous voulez supprimer.
Comment analyser le contenu des objets de données
Déboguer code ABAP
Dans cet exercice, vous analysez le code ABAP à l'aide de l'ABAP Debugger.
Tâche 1: Préparation
Copiez la classe que vous souhaitez déboguer.
Étapes
Ouvrez le code source de la classe globale /LRN/CL_S4D400_BTT_DEBUG dans l'éditeur ABAP.
Dans la barre d'outils Eclipse, sélectionnez Ouvrir ABAP Development Object. Vous pouvez également appuyer sur Ctrl + Maj + A.
Saisissez /LRN/CL_S4D400_BTT comme chaîne de recherche.
Dans la liste des objets de développement, sélectionnez /LRN/CL_S4D400_BTT_DEBUG, puis cliquez sur OK.
Liez la vue Explorateur de projets à l'aide de l'éditeur.
Dans la barre d'outils Explorateur de projets, recherchez le bouton Lier à l'éditeur. S'il n'est pas encore appuyé, sélectionnez-le. Par conséquent, l'objet de développement, qui est ouvert dans l'éditeur, doit être mis en surbrillance dans l'explorateur de projets.
Copiez la classe /LRN/CL_S4D400_BTT_DEBUG dans une classe de votre propre package (nom proposé : ZCL_##_DEBUG, ## correspondant à votre numéro de groupe).
Dans la vue Explorateur de projets, cliquez avec le bouton droit de la souris sur la classe /LRN/CL_S4D400_BTT_DEBUG pour ouvrir le menu de contenu.
Dans le menu contextuel, sélectionnez Dupliquer ....
Saisissez le nom de votre package (ZS4D400_##, où ## représente votre numéro de groupe) et le nom de la nouvelle classe (ZCL_##_DEBUG), puis cliquez sur Suivant.
Confirmez l'ordre de transport et cliquez sur Terminer.
Activez et testez la classe.
Appuyez sur Ctrl + F3 pour activer la classe.
Appuyez sur F9 pour exécuter la classe.
Vérifiez la sortie dans la vue Console.
Vérifiez la vue Console qui aurait dû s'ouvrir sous la forme d'un nouvel onglet sous la vue de l'éditeur.
Si la vue Console n'est pas visible, ouvrez-la en sélectionnant Fenêtre→Afficher vue→Autre. Double-cliquez sur Console dans la liste des occurrences.
Tâche 2: Analyser les valeurs de départ
Saisissez le débogueur dans la première instruction exécutable dans la méthode if_oo_adt_classrun~main( ) et analysez les valeurs de certains objets de données variables et constantes.
Étapes
Définissez un point d'arrêt au niveau de la première instruction qui ne définit pas de type ou de déclaration d'objet de données.
Astuce
TYPES définit un type de données, CONSTANTS déclare un objet de données constant, DATA déclare un objet de données variable.
Double-cliquez sur la marge de gauche de l'éditeur en regard de la ligne loan_remaining = loan_total.pour définir un point d'arrêt.
Exécutez la classe en tant qu'application console et accédez au débogueur.
Appuyez sur F9 pour exécuter la classe.
Si le système vous demande si vous voulez passer à la perspective Débogage, marquez Se souvenir de ma décision et cliquez sur OK.
Affichez la valeur de l'objet de données loan_rest et loan_total dans la vue Variables.
Dans la ligne de code actuelle (celle avec un arrière-plan vert), double-cliquez sur loan_remaining.
Dans la même ligne de code, double-cliquez sur loan_total.
Tâche 3: Exécution du programme de contrôle
Définissez des points d'arrêt et des points de surveillance. Exécutez des étapes individuelles ou reprenez l'exécution jusqu'à ce que le point d'arrêt ou le point d'observation suivant soit atteint. Superviser les modifications de valeurs des objets de données.
Étapes
Exécutez une étape individuelle pour déboguer la valorisation dans la ligne actuelle.
Dans la barre d'outils, sélectionnez Step Into (F5) ou appuyez sur F5.
Vérifiez que la valeur de loan_rest est passée de 0..00 à 5000.00.
Affichez le contenu de l'objet de données spec_repay_mode. Exécutez ensuite une autre étape individuelle pour voir quelle branche WHEN de la structure de contrôle CASE est exécutée.
Dans la ligne de code suivante, double-cliquez sur spec_repay_mode.
Appuyez sur F5 pour voir que le programme saute à la ligne de code WHEN 'Q'..
Définissez un point de surveillance pour la variable loan_rest et reprenez l'exécution du programme. Où l'exécution du programme s'arrête-t-elle à nouveau ?
Dans la vue Variables, cliquez avec le bouton droit de la souris sur LOAN_REMAINING et sélectionnez Définir le point de surveillance.
Dans la barre d'outils, sélectionnez Reprendre (F8) ou appuyez sur F8.
L'exécution du programme s'arrête immédiatement après la ligne de code loan_remaining = loan_remaining - repayment_month., également pour être précis, dans la ligne de code suivante avec le code exécutable.
Affichez le contenu de l'objet de données repayment_plan. Exécutez ensuite une autre étape individuelle pour voir comment elle est renseignée avec l'instruction APPEND.
Remarque
Étant donné que repayment_plan est une table interne, elle s'affiche non seulement dans la vue Variables, mais également dans la vue Table interne ABAP (débogueur) sous l'éditeur.
Double-cliquez sur repayment_plan à la fin de l'instruction APPEND.
Appuyez sur F5 pour voir comment repayment_plan est renseigné avec une première ligne.
Contrôlez le modèle de chaîne dans l'instruction APPEND et associez-le à la première ligne résultante dans la table interne repayment_plan. Affichez le contenu des objets de données qui apparaissent dans les expressions intégrées.
Double-cliquez sur les objets de données qui apparaissent entre accolades pour afficher leur contenu.
Définissez un autre point de surveillance pour la variable repayment_plan et reprenez l'exécution du programme pour quelques fois. Lorsque l'exécution atteint l'un des points de surveillance, analysez la valeur de loan_rest et de nouvelles lignes sont ajoutées à repayment_plan.
Dans la vue Variables, cliquez avec le bouton droit de la souris sur REPAYMENT_PLAN et sélectionnez Définir le point de surveillance.
Appuyez sur F8 pour reprendre l'exécution du programme.
Analysez les objets de données dans les vues Variables et Table interne ABAP (débogueur).
Au bout d'un certain temps, définissez un point d'arrêt de l'instruction pour toutes les instructions EXIT et supprimez les deux points de surveillance.
Accédez à la vue Points d'arrêt.
Astuce
La vue Points d'arrêt se trouve à côté de la vue Variables.
Dans la barre d'outils de la vue Points d'arrêt, développez le bouton de liste déroulante tout à gauche et sélectionnez Ajouter Point d'arrêt instruction ....
Dans la boîte de dialogue qui s'affiche, saisissez EXIT comme chaîne de recherche, cliquez sur la valeur EXIT dans la liste des occurrences, puis cliquez sur OK.
Dans la vue Points d'arrêt, cliquez avec le bouton droit de la souris sur le point de surveillance LOAN_REMAINING et sélectionnez Supprimer.
Dans la vue Points d'arrêt, cliquez avec le bouton droit de la souris sur le point de surveillance REPAYMENT_PLAN et sélectionnez Supprimer.
Reprenez l'exécution du programme jusqu'à ce que vous atteigniez la première instruction EXIT. Désactivez le point d'arrêt de l'instruction pour l'instruction EXIT. Exécutez ensuite des étapes individuelles jusqu'à ce que vous atteigniez la partie sortie du programme.
Appuyez sur F8 pour reprendre l'exécution du programme.
Passez à la vue Points d'arrêt et désélectionnez la ligne qui indique EXIT [Instruction].
Appuyez sur F5 jusqu'à atteindre la première ligne de code commençant par out->write(.
Ouvrez la vue Console. Exécutez le programme restant et poursuivez l'édition dans la vue de console.
N'appuyez pas sur
F5 pour déboguer la sortie. Utilisez
F6 à la place.
Remarque
Comme vous le verrez plus loin dans le cours out->write( ... ) n'est pas une instruction ABAP, mais un bloc de code réutilisable composé de nombreuses instructions ABAP. En appuyant sur F5, vous effectuez une étape dans ce code pour l'analyser en détail. Avec F6, vous passez l'étape au-dessus du bloc de code, en le traitant comme une instruction unique.
Appuyez plusieurs fois sur F6 jusqu'à la fin de l'application.
Analysez la sortie supplémentaire dans la vue Console et comparez-la au modèle de chaîne dans la ligne de code précédente.
Lorsque l'application est interrompue, n'oubliez pas de revenir à la perspective ABAP.
Sélectionnez ABAP à droite de la barre d'outils Eclipse.