Reading Sample
2.1 Barre d’outils
La barre d’outils du débogueur se compose des fonctions représentées sur la Figure 2.2 :
Figure 2.2 : Barre d’outils
En détail, voici les fonctionnalités de cette barre d’outils avec les raccourcis clavier associés.
Étape individuelle F5
Exécuter F6
Retour F7
Suite F8
Modifier incrément du débogage Ctrl + Maj + F10
Créer un point d’arrêt F9
Créer un point de surveillance Maj + F4
Sauvegarder mise en forme Ctrl + Maj + F3
Configurer couche de débogage Ctrl + Maj + F4
2.1.1 Étape individuelle F5
Cette fonction permet d’avancer ligne par ligne dans le programme. Prenons l’exemple du programme ci-dessous, afin de bien comprendre ce que fait cette fonctionnalité.
1 START-OF-SELECTION. 2 3 IF p_werks IS NOT INITIAL. 4 5 PERFORM get_data. 6 7 IF NOT gt_data[] IS INITIAL. 8 9 LOOP AT gt_data ASSIGNING. 10 11 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' 12 EXPORTING 13 input = -matnr 14 IMPORTING 15 output = -matnr. 16 17 CALL SCREEN 100. 18 19 ENDLOOP. 20 ENDIF. 21 ENDIF.
Si un point d’arrêt est défini à la ligne 3, en cliquant sur l’icône Étape individuelle ou en utilisant le raccourci clavier F5, le programme avancera à la prochaine ligne de code, soit la ligne 5. En réappuyant sur F5, le programme avancera de nouveau à la ligne suivante. Comme il s’agit de PERFORM
, le programme entrera dans cette routine et il sera ensuite possible de continuer à l’exécuter pas à pas. De même, en arrivant à la ligne 11, le programme entrera dans la fonction où il sera également possible de continuer pas à pas.
2.1.2 Exécuter F6
Cette fonction est similaire à la fonction précédente, mais elle ne rentrera pas dans le détail d’un appel d’objet tel qu’une routine, une fonction, une classe, etc.
Avec l’exemple précédent et un point d’arrêt à la ligne 3, en cliquant sur l’icône Exécuter ou en passant par le raccourci clavier F6, le programme avancera à la ligne 5. Si l’on appuie de nouveau sur F6, au lieu d’entrer dans la routine, il accédera directement à la ligne 7. De même, une fois à la ligne 11, le programme passera la fonction pour accéder directement à la ligne 17.
La fonction de F6
Le fait de sauter une routine, fonction, etc. avec la fonctionnalité F6 ne signifie pas que le programme n’exécute pas le code contenu dans ces parties, mais simplement qu’il reviendra à la partie principale après l’avoir exécuté. Ce procédé évite de dérouler tout un programme, ce qui peut être long et fastidieux.
2.1.3 Retour F7
La fonctionnalité Retour ou le raccourci clavier F7 permettent de revenir à l’étape supérieure du programme. Lors de son exécution, un programme passe par plusieurs couches composées de routines, méthodes ou fonctions, etc.
Dans le débogueur, il est possible de voir toutes les étapes par lesquelles le programme est passé. La Figure 2.3 est un exemple d’une pile ABAP (liste de programmes en cours d’exécution – voir section 3.2.2). Le programme se situe à l’étape 9 de la méthode GET_PARAMETERS
de la classe CL_SALV_CSQ_PARAMS_DB
.
Figure 2.3 : Pile ABAP pendant l’exécution d’un programme
Ainsi, si l’étape 9 ne paraît pas intéressante, et que l’on souhaite poursuivre l’analyse à l’étape 8, la fonction de F7 permet de revenir à l’étape précédente.
Rappelons que le fait de revenir en arrière ne signifie pas que le code de l’étape quittée n’ait pas été traité.
2.1.4 Suite F8
La fonctionnalité Suite ou le raccourci clavier F8 permettent de terminer l’exécution du programme et de sortir du débogueur pour arriver au résultat final. Cependant, si un point d’arrêt a été placé un peu plus loin dans l’exécution du programme, il s’arrêtera de nouveau au point défini. Cette fonctionnalité permet, dans l’analyse de programmes complexes, de passer de nombreuses étapes très rapidement.
Pour conclure, la Figure 2.4 représente les différents types d’exécution du débogueur.
Figure 2.4: Schéma de l’exécution du programme
2.1.5 Modifier incrément du débogage Ctrl + Maj + F10
Lorsque le programme contient une condition IF
composée de plusieurs conditions, par défaut le débogueur vérifie si tout le bloc est valide. Avec l’option d’incrément, il est possible de vérifier chaque étape de la condition.
Dans l’exemple de la Figure 2.5, le débogueur vérifie d’abord la première étape ; si elle est validée, il passe à la seconde et ainsi de suite. Il est donc possible de cibler plus aisément le problème lorsqu’une condition est incorrecte.
Figure 2.5 : Exemple du débogueur avec l’option Incrément
2.1.6 Créer un point d’arrêt F9
Bien que l’icône rappelle le point d’arrêt de l’éditeur ABAP, sa fonctionnalité permet de définir un point d’arrêt selon plusieurs critères :
Instruction ABAP
Il suffira de définir une syntaxe ABAP pour que le programme s’arrête.
Utilisation du point d’arrêt Instruction ABAP
Dans l’exemple de la Figure 2.6, on souhaite que le programme s’arrête à toutes les instructions AUTHORITY-CHECK
afin de relever les autorisations nécessaires à l’exécution du programme.
Figure 2.6 : Mise en place d’un point d’arrêt sur une instruction
Méthode
Il faut ici définir notamment le nom d’une classe, celui d’une méthode, s’il s’agit d’une classe SAP (standard ou spécifique) visible via la transaction SE24, s’il s’agit d’une classe locale, visible uniquement dans le programme en cours d’exécution, ou s’il s’agit d’une classe locale définie dans une autre classe, comme représenté sur la Figure 2.7.
Figure 2.7 : Point d’arrêt sur une méthode
Fonction
Il s’agit du même comportement que pour les méthodes, mais avec les modules de fonction. Il est à noter qu’il est possible de filtrer l’entrée selon les méthodes, fonctions, etc. en cliquant sur l’icône .
Il sera alors possible d’ajouter une condition au point d’arrêt, comme indiqué sur la Figure 2.8.
Utilisation du point d’arrêt Fonction
Dans cet exemple, nous allons définir un point d’arrêt dans la fonction CONVERSION_EXIT_MATN1_OUTPUT
quand le paramètre INPUT
est égal à ‘BW-5400’.
Figure 2.8 : Condition d’entrée pour une fonction
Autres onglets
Concernant les autres fonctionnalités, leur utilisation est similaire et suit le même schéma de fonctionnement. Signalons peut-être l’onglet Message qui est très utile en cas de message d’erreur. Il suffira alors d’exécuter le débogueur grâce à l’instruction /h
, puis de créer un point d’arrêt avec le bouton Créer un point d’arrêt ou le raccourci clavier F9, dans l’onglet Message, puis d’insérer l’ID du message, son numéro et son type pour trouver la ligne de programme ABAP.
Message d’erreur dans une transaction
On souhaite créer une commande d’achat (CA) dans la ME21N avec de mauvaises informations mais, très vite, un message d’erreur apparaît en bas de la fenêtre SAP (voir Figure 2.9).
Figure 2.9 : Message d’erreur lors de la création d’une CA
En double-cliquant sur ce message d’erreur, le numéro de l’erreur s’affiche avec le détail du message. Dans l’exemple que nous venons de voir, le détail du message est celui de la Figure 2.10.
Figure 2.10 : Message d’erreur de la ME21N
De retour sur l’écran de la ME21N, il suffit de lancer le débogueur via /h
en validant deux fois : la première pour valider l’instruction et la deuxième pour lancer le débogueur (voir Figure 2.11). Ensuite, il faut insérer le message trouvé dans la fonction F9, comme indiqué sur la Figure 2.12.
Figure 2.11 : Exécution du débogueur via /h
Figure 2.12 : Définition du point d’arrêt
Cliquer sur le bouton Créer Point d’arrêt
Choisir l’onglet Message
Remplir les champs avec le message d’erreur rencontré
Après validation, il suffit de cliquer sur la fonction Suite ou d’appuyer sur F8 afin d’exécuter le programme jusqu’au point d’arrêt défini par le message. Cela permet de voir que le programme s’arrête à l’endroit où l’erreur est rencontrée, comme sur la Figure 2.13.
Figure 2.13 : Ligne du code où se situe l’erreur
Ainsi, l’erreur provient d’un résultat d’un SELECT
de la table T024W. La clause du SELECT
est définie avec les champs de la division (WERKS) et de l’organisation d’achats (EKORG), venant respectivement des variables IM_WERKS et IM_EKORG. En double-cliquant sur ces variables, il est possible de voir leur contenu dans l’onglet Variables 1, sous la colonne Variable (voir Figure 2.14).
Figure 2.14 : Aperçu des valeurs de variables
Nous reviendrons un peu plus tard en détail sur ce bloc de variables dans la section d’affichage rapide des variables du chapitre sur les outils SAP (voir section 3.2.3).
2.1.7 Créer point de surveillance Maj + F4
Le point de surveillance sert, comme son nom l’indique, à cibler une variable dans un programme avec la possibilité de lui attribuer une valeur à rechercher. Si le nom de cette variable est renseigné, le programme s’arrête lorsque la valeur est modifiée ou lorsqu’il atteint celle souhaitée.
Un programme à déboguer
Dans l’exemple ci-dessous, on ne souhaite afficher que les documents d’achat de type K (contrat). Le programme retourne la liste indiquée sur la Figure 2.15 :
DATA lv_date TYPE sy-datum. "Prendre la date en cours et retirer 4 mois CALL FUNCTION 'CCM_GO_BACK_MONTHS' EXPORTING currdate = sy-datum backmonths = 4 IMPORTING newdate = lv_date. "Sélection des commandes d'achat SELECT ebeln, bstyp FROM ekko INTO TABLE @DATA(lt_ekko) WHERE aedat GE @lv_date. "Boucle sur les commandes d'achat et affichage du n° de document LOOP AT lt_ekko INTO DATA(ls_ekko). IF ls_ekko-bstyp = 'K'. WRITE / ls_ekko-ebeln. ENDIF. ENDLOOP.
Figure 2.15 : Résultat
Si le résultat paraît incertain et que l’on souhaite savoir pourquoi une valeur attendue n’apparaît pas (numéro de document 6050004111, par exemple), il est alors utile de définir un point de surveillance sur la variable des numéros de DA, à savoir LS_EKKO-EBELN. Il suffit alors de cliquer sur le bouton et la fenêtre représentée sur la Figure 2.16 s’affiche.
Figure 2.16 : Fenêtre du point de surveillance
Elle est composée des parties suivantes :
Variable
Renseignez celle que vous souhaitez surveiller.
Nom de progr
Nom du programme où se situe la variable du champ précédent (par défaut, il sera renseigné par le nom du programme exécuté).
Points de surveillance
Lors d’un débogage assez complexe (programme standard, par exemple), il est possible qu’une variable soit présente dans un programme appelé plus tard, mais qui n’existe pas dans le programme au moment où le point de surveillance souhaite être défini. Il faudra alors avancer dans l’exécution du programme jusqu’à ce que l’on arrive au programme souhaité.
Type point de surveill.
Là encore, il en existe deux : le Pt surveill. sur var. qui, comme son nom l’indique, surveille toutes les données contenues dans une variable et le Pt surveill. sur attr. d’objet (Figure 2.17) qui, quant à lui, surveille toutes les données de type objet (classes, interfaces, etc.). Ainsi, lorsqu’un objet a été créé sous une référence, un point de surveillance peut être inséré afin que le programme s’arrête dès lors qu’il modifie un des attributs d’instance ou statiques. Lorsque le point de surveillance sur attributs d’objet est sélectionné, les options qui suivent sont modifiées afin de pouvoir filtrer selon les attributs d’instance ou les attributs statiques souhaités (publics, privés, protégés, etc.).
Figure 2.17 : Point de surveillance sur attributs d’objet
Condition :
Enfin, la condition permet de définir la valeur souhaitée à laquelle le débogueur devra s’arrêter. Il existe plusieurs formes de condition.
Utilisation d’un point de surveillance
Pour les différents types de condition, l’exemple suivant, tiré de la fonction BAL_DB_LOAD
qui lit les messages de log pour les afficher lors de la transaction SLG1
, sera utilisé (voir Figure 2.18). La table interne L_T_BALHDR_CURRENT
est alors composée des valeurs ci-après. Comme on le remarque, sur la Figure 2.19, la table possède plus de 27 000 entrées.
Figure 2.18 : Exemple de fonction des logs SLG1
Figure 2.19 : Table interne L_T_BALHDR_CURRENT
1. La condition simple. Dans l’exemple ci-dessus, on souhaite que le débogueur s’arrête lorsque le champ L_S_LDAT-ADMIN-LOGNUMBER possède la valeur 451598773 située à ligne 14980 (voir Figure 2.20). Le déroulement du programme ligne par ligne s’avérerait très long. Le fait de définir le point de surveillance avec une condition simple permettra de gagner énormément de temps lors de l’analyse. Ainsi, pendant la boucle LOOP, le débogueur s’arrêtera à la ligne souhaitée.
Figure 2.20 : Définition de la condition
2. LINES( itab )
: Il est également possible de définir un point d’arrêt selon le nombre de lignes contenues dans une table. Toujours en s’appuyant sur l’exemple ci-dessus, nous souhaitons que le débogueur s’arrête lorsque la table interne de sortie
Figure 2.21 : Utilisation de la fonction LINES
3. STRLEN( string )
comme la fonction LINES pour une table interne, celle-ci va définir à quelle longueur de la chaîne de caractères le programme devra s’arrêter pour débogage. Dans l’exemple de la Figure 2.22, la variante lv_texte
est incrémentée d’une lettre à chaque boucle, et nous souhaitons arrêter le programme pour le débogage lorsque la longueur du champ est égale à 5.
lv_texte = 'A'. DO 10 TIMES. CONCATENATE lv_texte 'A' INTO lv_texte. ENDDO.
Figure 2.22 : Condition avec STRLEN
La condition STRLEN
La condition STRLEN
ne fonctionne qu’avec des variables de type string, et il n’est pas possible d’en créer avec un type CHAR
.
Sauvegarder mise en forme Ctrl + Maj + F3
Il est possible de sauvegarder la disposition et la mise en forme des différentes sections du débogueur. En effet, chaque onglet peut être modifié à souhait. Nous le verrons plus en détail au chapitre 4.1 Modification de l’interface.
2.1.8 Configurer couche de débogage Ctrl + Maj + F4
La configuration de la couche de débogage permet d’affiner l’exécution du débogueur en chargeant des profils existants ou en spécifiant ce dont on a besoin. Le détail de l’interface se présente comme dans la Figure 2.23.
Figure 2.23 : Interface de la couche de débogage
En cochant l’option Débogage par couche actif, toute la partie inférieure qui restait grisée apparaît désormais comme étant modifiable.
Ainsi, l’interface est divisée en deux parties :
Utilis. d’ens. d’objets prédéf. (couche) via profils du débogueur
Cette partie permet de charger des profils existants que l’on peut retrouver en appuyant sur l’aide à la recherche F4. La liste des profils est alors chargée, il suffit d’en choisir un (FICO_GENERAL, par exemple) afin d’en étudier le contenu (voir Figure 2.24).
Figure 2.24 : Ouverture d’un profil de débogage
Ainsi, le profil FICO_GENERAL présente le détail comme indiqué dans la Figure 2.25.
Figure 2.25 : Détail du profil FICO_GENERAL
On peut voir que le profil FICO_GENERAL est composé de l’objet FICO lui-même paramétré en visibilité.
Pour un cas plus concret, nous allons maintenant créer un profil temporaire. Pour cela, il suffit de cliquer sur le bouton Profil temp. de la fenêtre principale, et à l’invite de la fenêtre, nous allons choisir Sans modèle, comme à la Figure 2.26.
Figure 2.26 : Création d’un profil
La fenêtre des sélections de profil apparaît de nouveau. En insérant une nouvelle ligne, il est possible de sélectionner un ensemble d’objets (ici SALV_CORE).
Figure 2.27 : Choix d’un profil
En double-cliquant sur l’objet, il est possible d’en voir le contenu et aussi d’en afficher le détail (Figure 2.28 et Figure 2.29).
Figure 2.28 : Ouverture du détail de SALV
Figure 2.29 : Détail de l’objet SALV
On peut alors s’apercevoir que l’objet SALV_CORE, composé de la sélection SALV, contient deux packages SALV et SLIS, ce qui signifie que notre profil temporaire ne s’arrêtera que dans les objets ABAP ayant pour package SALV et SLIS.
Bien entendu les objets et ensemble d’objets peuvent être spécifiques, et il est possible de les créer via la transaction SLAD
.
Déf. Directe de l’ensemble d’objets visible (couche)
Dans cette section, il est possible de définir directement les packages, classes, programmes et interfaces implémentées. Dans l’exemple de la Figure 2.30, le débogueur a été configuré afin de s’arrêter uniquement dans les packages de type Z*.
Figure 2.30 : Configuration pour appel de package Z*
All contents. Learn more. Discover now.
et.training - Your learning platform for SAP software
- Access to all learning content1
- Regular new releases
- Intelligent search algorithm
- Innovative reading experience
- Customized learning paths
- Certificates & QA tests2
1 You get access to all learning content. Online trainings, certificates are NOT part of the flat rate.
2 More information on request.