User Tools

Site Tools


abap:debug

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
abap:debug [2014/10/15 14:22] – [Resources] ginkoabap:debug [2018/03/30 12:06] (current) ginko
Line 1: Line 1:
 ====== ABAP Debugging Tips ====== ====== ABAP Debugging Tips ======
 +La [[http://scn.sap.com/community/abap/testing-and-troubleshooting/blog/2010/11/10/new-abap-debugger-tips-and-tricks|bible]] du debugger ABAP !
 +
 ===== Breakpoints ===== ===== Breakpoints =====
 (//[[http://help.sap.com/saphelp_nw70/helpdata/EN/c6/617cbee68c11d2b2ab080009b43351/content.htm|Source]]//) (//[[http://help.sap.com/saphelp_nw70/helpdata/EN/c6/617cbee68c11d2b2ab080009b43351/content.htm|Source]]//)
Line 14: Line 16:
 === Effets === === Effets ===
 Les breakpoints dynamiques interrompent en général l'exécution du programme avant l'instruction sur laquelle ils sont placés, sauf dans le cas des exceptions. Dans ce cas là, ils arrêtent l'exécution après que l'exception soit levée. Les breakpoints dynamiques interrompent en général l'exécution du programme avant l'instruction sur laquelle ils sont placés, sauf dans le cas des exceptions. Dans ce cas là, ils arrêtent l'exécution après que l'exception soit levée.
 +
 +==== Groupes de contrôle ====
 +En utilisant l'option ''ID <group>'' sur les instructions ''BREAK-POINT'', ''ASSERT'' ou ''LOG-POINT'' on en contrôle l'activation via la ''SAAB''.
 +
 +==== Logging ====
 +Il est possible de logger dans un but de debug grâce aux 3 instructions.
 +  * <code abap>BREAK-POINT log_text.</code>Va logger ''log_text'' en ''SM21''. (NB : log_text doit être de type C, de longueur 40 max.)
 +  * ''ASSERT'' et ''LOG-POINT'' vont logger dans le journal ''SAAB'' si le groupe a activé le logging pour chaque instruction.
 +==== Sauter des itérations ====
 +Il est possible de sauter n itérations d'un break-point dans le debugger (onglet break-point). Cela peut-être utile sur un break-point localisé dans une loop.
  
 ===== Practical debugging ===== ===== Practical debugging =====
Line 36: Line 48:
 === Drag'n'drop === === Drag'n'drop ===
 En drag'n'dropant un fichier texte spécifique (ci-dessous) dans une fenêtre SAP, on active le mode debug. Cela est très pratique pour les fenêtres qui n'ont pas de transaction prompt comme les popups par exemple. En drag'n'dropant un fichier texte spécifique (ci-dessous) dans une fenêtre SAP, on active le mode debug. Cela est très pratique pour les fenêtres qui n'ont pas de transaction prompt comme les popups par exemple.
-<code ini>[FUNCTION]+<file ini debug.ini>[FUNCTION]
 Command=/H Command=/H
 Title=Debugger Title=Debugger
-Type=SystemCommand</code>+Type=SystemCommand</file>
 === Debug de background process (job) === === Debug de background process (job) ===
-Le debugger n'agît que sur le process courant. Il ne rentrera pas dans les instructions qui vont s'exécuter dans un process différent (typiquement : un job submit). Pour debugger de tels jobs, exécuter le programme jusqu'au job submit, mais s'arrêter avant (sur) le job close. A ce niveau, se rendre en ''SM37'', sélectionner le job plannifié voulu et entrer la commande ''jdbg'' dans le command prompt.+Le debugger n'agît que sur le process courant. Il ne rentrera pas dans les instructions qui vont s'exécuter dans un process différent (typiquement : un [[abap:job|job submit]]). Pour debugger de tels jobs, exécuter le programme jusqu'au job submit, mais s'arrêter avant (sur) le job close. A ce niveau, se rendre en ''SM37'', sélectionner le job plannifié voulu et entrer la commande ''jdbg'' dans le command prompt
 +=== Debug de background process (SE38) === 
 +Pour débugger un programme lancé en background depuis la ''SE38'', poser un breakpoint dans le form ''(LBTCHENQ)DEQ_JOB''.
 === Debug de fonctions RFC === === Debug de fonctions RFC ===
 Une astuce pour debugger un appel de fonction RFC : Une astuce pour debugger un appel de fonction RFC :
Line 50: Line 64:
   * Il ne reste plus qu'à sortir de la boucle pour continuer le debug (passer ''indx'' à une valeur > 0).   * Il ne reste plus qu'à sortir de la boucle pour continuer le debug (passer ''indx'' à une valeur > 0).
  
 +=== Debug de background (via enhancement) ===
 +  * Implémenter et activer un enhancement infini (exemple ci-dessous) à l'endroit souhaité.<code abap>data x.
 +while x is initial.
 +endwhile.</code>
 +  * Récupérer l'exécution en ''BTC'' en ''SM50'' pour débugger.
 +=== Debug d'objets particuliers ===
 +== Génération d'idocs par Output Message ==
 +[[http://scn.sap.com/people/gajendra.bhakuni/blog/2007/04/23/debugging-outbound-idoc-output-control-scenarios|Source]]
 +  - Créer (par répétition ou sur un nouveau cas de test) un nouvel output message mais en modifiant les //condition records// afin de ne pas l'envoyer immédiatement (''4'') : en choisissant l'option ''1''.
 +  - Récupérer le ou les FM suceptibles de générer l'idoc désiré (un F4 en SE37 sur ''IDOC_OUTPUT_<message_type>*'' devrait remonter une sélection pas trop mauvaise (<message_type> est le type de message comme dans le partner profile / outbound parameters).
 +  - Poser des points d'arrêt dans ces FM (peut être fait directement depuis le debugger)
 +  - Lancer le programme ''RSNAST00'' en débug en précisant les bons paramètres afin de choper le message que l'on vient de créer.
 +===== Détecter le mode débug en ABAP =====
 +<code abap>TABLES: abdbg.
 +IF abdbg-srepid IS NOT INITIAL.
 +  " Gotcha!
 +ENDIF.</code>
 ===== Resources ===== ===== Resources =====
   * [[https://www.sap-help.net/Page/]]   * [[https://www.sap-help.net/Page/]]
   * [[http://sapignite.com/how-to-debug-sap-rfc-background-job-update-fm-etc/]]   * [[http://sapignite.com/how-to-debug-sap-rfc-background-job-update-fm-etc/]]
abap/debug.1413375735.txt.gz · Last modified: 2014/10/15 14:22 by ginko