Anasayfa Forumlar SAP Functional Moles - Abbreviations ABAP Teme igler
Secrets of the ABAP Debugger: Advanced ABAP Debugging Techniques
54° seg O22 0042018
SAP Blog
Gas)
Kalin: 22 Ara 2017 Messfor 1368. Tepk pane 7 Puanare 6
220002018 an
Goal of this blog post
‘The ABAP debugger is 2 powerful tool helping to examine your ABAP code at runtime,
Besides the common and basic features, such as stepping through your code and inspect the values of your variables, field
symbols, and references, it provides helpful features that can simplify and shorten your debugging sessions. Not all ofthese.
‘features might be known to everyone,
In this blog post Iam going to demonstrate my personal favourites.
Debugging Techniques
Debugging deep inside the Call Stack
‘Apart from debugging your own custom source code or the business-oriented code on the application level, it might be
necessary from time to time to dive deeper into the cal stack. Sometimes you can only spot bugs when debugging the
asynchronously executed update tasks of system programs,
System Debugging
System programs are typically provided by SAP E itself and you should not classify your own programs as such, System code is
considered relatively technical and not containing any business logic. As a consequence, developers focusing on business logic
commonly do not need/want to debug ths. However, from time to time your debugging session might end up at a system
program.
Oralingione
‘iis
sone
In order to dive into system code using the ABAP debugger you have to activate system debugging beforehand. Choose the
menu entry System Debugging On/Off inthe settings menu,
[ Settings | Miscelaneous System
Change Debugger Profie/ Settings
Activating system debugging allows you to access source code you are typically not able to see and, therefore, can help
investigating issues. On the other hand, you need to deal with a growing call stack as al system programs are visible too. Usually
the system code is executed in the background without your notice
Update DebuggingWhenever you deal with transactions or reports that utilize asynchronous update tasks (eg, to persist business data), you might
encounter error messages occuring from the executed code inside the update task. Such errors appear usually in the SAP GUI
telling you "Update was terminated”
In order to examine what is going wrong, you can activate update debugging. If update debugging is turned on, the ABAP
debugger opens once the update task is being executed and allows you to inspect the program flow.
Consider the change of a cost center as example. We open transaction KS02, select a demo cost center, and open its master data.
Let us adjust the description. Before we click Save, we enter “7h inthe transaction code input field on the top left comer and
press Retum. The green success message “Debugging switched on is displayed at the bottom,
After clicking Save, the debugger opens showing the PAI/PBO modules ofthe current ABAP program. In order to activate update
debugging, we open the debugger settings following the menu path Settings -> Change Debugger Profile/Settings. In this dialog
we activate Update Debugging and confirm.
| Debug Modes
“ISystem Debupang
Update Debugang
“FTRFC (ln Backoround Tast): Block Sending
“ESI Debugong
| Shared Objects: Debug Automatic Area Structuring
Pressing F8 skips the current debugger session. The ABAP server continues processing the current ABAP program which prepares
and hands over the update tasks tothe update processing, Once they are executed, the debugger opens once again,
Coming back to the cost center change example, we end up inside the function module KOSTL, WRITE DOCUMENT. According to
its source code, it takes care calculating the change documents with regards to this cast center master data change.
Inthe most cases, multiple update tasks are coming nto play for one business process (changing a cost center i relatively easy,
though), Let us figure out how we can find all of them at runtime,
Looking at the call stack, we can see the form routine VB_V2_NORMAL.
Before we can navigate into this code, we have to activate system debugging (see chapter above),
Inside this form routine we can see that the internal table VBMOD_TABL contains all function modules to be processed,
Using update debugging you are able to spot bugs inside function modules executed in update task, Even if you do not
encounter any bugs it might be interesting to see what happens under the hood.
Influence the Program Behaviour at Runtime
When you are examining the flow of an ABAP program in the debugger and you aim to focus on a certain piece oft only it may
happen thatthe speciic case you're investigating only occurs under certain circumstances (eg. certain variables having certain
values). n such a case you have to invest time to modify everything so that the debugger reaches the piece of code you're
interested in
‘Avoiding this effort time is money) you can leverage the simple, but nevertheless very valuable, feature named Goto Statement.Assuming the debugger is currently at line 32 in the given screenshot, you right-click on the line number where you want it to
continue and choose Goto Statement. As a consquence, the lines in between are skipped, Le. not executed, and the processing
continues where you want
‘Be aware that ths feature can be abused: Users can skip intended and meaningful authorization checks and, therefore, conduct
actions they are not allowed to do, Generally itis 2 recommencled practice to tur this feature off (e. not authorizing anyone) in
productive environments.
Make your Breakpoints more powerful
Breakpoints allow the developer to specify in which code line the debugger should stop.
Typically you choose one particular code (eg. line xin program z) because you want to inspect the program flow around this
code. Besides such dynamic breakpoints you can leverage special dynamic breakpoints and conditional breakpoints to make your
debugging experience easier
‘Special Dynamic Breakpoints
‘Assume we requite to identify all authorization checks conducted during a program flow. We know that AUTHORITY-CHECK is the
respective ABAP keyword. How do we salve this challenge?
Firstly, we could execute the A8AP program in the debugger and follow the program flow by hand. After browsing through all
‘methods, function modules ete, we have noted down all authorization checks. Apparently this approach is time-consuming and
also error prone as you never know if you have missed some piece of code deep in the call stack
Secondly, as an advantageous approach you can leverage special dynamic breakpoints (that’s the oficial name according to the
documentation). This feature let's you create breakpoints at every instance of a certain eg. statement, exception, oF function
module
In order to define special dynamic breakpoints, choose Breakpoints -> Breakpoint At in the debugger menu, Choose Breakpoint
at Statement with regards to our example. In the appearing pop-up we enter the name of the command,
[As a consequence, the debugger creates breakpoints at every authorization check. By pressing FB you can navigate from one
occurrence to another
Consider activating system debugging beforehand to really fetch all authorization checks (otherwise you miss them hidden in
system code)
Conditional Breakpoints
‘Assume you are debugging some code containing a loop whereas you are interested in debugging a certain cycle (eg. the fifth
loop cycle). Making the debugger stop in this exact cycle is easy using conditional breakpoints
Consider the following sample program,REPORT zmd_cond_orkpnt1.
DATA W.foo TYPE VALUE 0
“for demonstration purposes; do not use static breakpoints in production
BREAK-POINT.
0 So TIMES,
ADD 1 TOW. foo.
ENDDO,
“for demonstration purposes; do not use static breakpoints in production
BREAK-POINT,
‘The do loop runs 50 times whereas each loop cycle updates the variable lv bar with the current value of W.foo. When we set a
breakpoint inside the loop, we stop there 50 times by pressing F8.
8y introducing a conditional breakpoint we can define that the debugger shall only stop at this breakpoint in case a given
condition is met
We can define the condition using tab stip Break /Watchpoints,
Seni Set a
MIB vetoes | ccpectcwms
tphec7 ademas me
ss
Lets say we want to stop when lv foo gets 42 assigned.
eg tigre neue con)
Condition for Breakpoint
lv_foo = 44]
After pressing F8 the debugger stops exactly at the respective loop cycle,
This simple example visualizes how to use conditional breakpoints, I found this feature to be quite useful a couple of times
throughout my projects.
Classification of Breakpoints
In the official documentation we can find terms such as static breakpoints, special dynamic breakpoints, external breakpoints,
debugger breakpoints. While investigating the meaning ofthese terms | found that they are addressing different properties of
breakpoints, such as their life time or the way you create them,
Therefore, | was curious and have created a classification of breakpoint times according to the following categories
+ Life Time
+ Way of Creation
+ Can be User-Agnostic
+ Processing Mode
+ Conditionally Considered
+ Activated
Ute Time
Breakpoints exist fora certain time, that is once ther lifetime has passed they are gone and cannot be used anymore. The
possible lifetimes are
+ Lives during current debugging session: Debugger Breakpoint
+ Lives during all sessions of current user session: Session Breakpoint
+ Lives typeally fortwo hours: External BreakpointSAPOfis
‘There is several ways how to create a breakpoint
‘+ Harc-wired statement in the code (such as BREAK-POINT}: Static Breakpoint
+ Single line selected by hand: Dynamic Breakpoint
+ Lines selected by certain definition (such as at every instance of certain statement) Special Dynamic Breakpoint
Can be User Agnostic
[A breakpoint can be valid for a certain user name or not
If 50, the breakpoint is considered once the respective user executes the code line. This applies to all breakpoints unlike Static
Breakpoints defined with BREAK-POINT.
Ifnot, the debugger stops at every execution regardless of the current user. This applies to Static Breakpoints defined with
BREAK-POINT.
Processing Mode
‘There is breakpoints that stop at dialog processing only, such as Debugger Breakpoints.
in contrast, 9, External Breakpoints are used to debug processing of remote calls such as RFC or ICF processing,
Conditionally Considered
‘The consideration of a breakpoint may depend of a given condition expressed as logical condition, For instance, a variable has to
have a defined valve and, therefore, the debuager only stops if the condition i fulfilled. Such breakpoints are referred to as
Conditional Breakpoints
‘Apart from their existence breakpoints can be active or inactive,
Incase you do not need a breakpoint being considered in your debugging session, you can deactivate it, You can turn iton again
once you want to use it
Discover changing Variables using Watchpoints
\Watchpoints are quite useful whenever you are interested int
attrioute changes its value, Especially in very complex program flows with a deep call stack it may be hard to figure out value
changes manually
1 Time point and the code at which a certain variable or an object,
In order to create a watchpoint we navigate to the tab Break /Watchpoints, choose the tab Watchpoints and clck the Creat
Considering the sample program about con¢
variable lv. foo,
tional breakpoints from above, we'te interested in spotting changes of the value of
In this dialog we can choose between inspecting variables of object attributes. We can also specify the respective ABAP program,
After creating this watchpoint and pressing F@ in our sample program, we get notified that the watchpoint has been reached,
Watchpoint reached (LV_FOQ)
Debugger ScriptingWW _ debugger Scripting is @ powerful mechanism to automate processes that occur often, are time-consuming and are conducted by
hand.
a ‘Assume that you want to skip authorization checks by manipulating the sy-subre value.
Disclaimer: Only do so i itis harmless, that is you must nat abuse this feature. Tell you admin if you are authorized to use it and
~ you are working infield with sensitive data or processes.
e You can open the tab Script in the debugger and there you will find a local class implementation, Besides the methods prologue,
init and end you can add you own logic in the method script. On the left-hand side you can decide when the script shall be
eB triggered, For instance, et every debug step or after once a watchpoint is reached,
‘ant iin git yapmana veya dye olan geek,
Hay Debi i
wf eS Pt OBS
‘Okumaya devam et
Anasayfa. Forumlar_ SAP Functional Modes - Abbreviations ABAP Teme igler