Skip to content

SAP ABAP Debugging — Step-by-Step Guide

DodaTech Updated 2026-06-24 7 min read

In this tutorial, you'll learn about SAP ABAP Debugging. We cover key concepts, practical examples, and best practices.

SAP ABAP Debugging is the process of stepping through ABAP code line by line to inspect variables, understand program flow, identify logic errors, and fix bugs in SAP custom programs and standard system code.

What You'll Learn

You will learn to set breakpoints, use the ABAP Debugger interface, watch variables, debug external calls, analyze performance with runtime analysis, and debug Web Dynpro and SAPUI5 applications.

Why It Matters

Production bugs in SAP cost companies thousands per hour. A miswritten ABAP report that posts incorrect FI documents, a bad BAPI call that creates duplicate purchase orders, or a workflow stuck in deadlock all require debugging to fix. Every ABAP developer spends 30-50% of their time debugging.

Real-World Use

A month-end closing report shows a $500,000 discrepancy in the General Ledger. The FI team suspects a custom ABAP program modified the posting logic. The ABAP developer sets a breakpoint in the custom FM, steps through the code, and discovers a currency conversion factor is applied twice — fixes it in 15 minutes, saves a day of reconciliation.

Learning Path

flowchart LR
  A["SAP ABAP"] --> B["ABAP Objects"]
  B --> C["ABAP Debugging
You are here"] C --> D["SAP ALV Reports"] D --> E["SAP Workflow"] style C fill:#f90,color:#fff

Debugger Basics

Starting the Debugger

There are three ways to enter the debugger:

Method 1: /h in command field
  - Type /h in any SAP GUI screen command field
  - Execute the transaction
  - Debugger opens before the transaction runs

Method 2: Session breakpoint
  - Go to SE38 or SE80
  - Click on the line number where you want to stop
  - Press F9 (Set/clear breakpoint)
  - Run the program with F8

Method 3: External breakpoint
  - In SE38, click Breakpoints → Create → External
  - Enter program name and line number
  - Debugger activates when any user hits that line

Debugger Interface

flowchart TD
  A["Debugger
Session"] --> B["Code Pane"] A --> C["Variable Pane"] A --> D["Control Buttons"] B --> E["Current line
(Yellow arrow)"] C --> F["Table/Structure
Drill-down"] D --> G["F5 / F6 / F7 / F8"]

Debugger Navigation Keys

Key Action Description
F5 Single step Execute one line, step into calls
F6 Execute Execute one line, step over calls
F7 Return Run until current method returns
F8 Continue Run to next breakpoint or program end
Shift+F5 Single step (new) Single step using new debugger

Breakpoints

Types of Breakpoints

Type Scope Lifetime
Session Current user only Until session ends
External All users Until debugger ends or deleted
Hard-coded Code-level Permanent in source
Watchpoint Variable value Until condition met

Hard-Coded Breakpoint

For permanent debugging points in development:

REPORT Z_DEBUG_DEMO.

DATA: lv_value TYPE i VALUE 100.

BREAK-POINT. " Debugger stops here

lv_value = lv_value * 2.

BREAK-POINT ID ZMYDEBUG. " User-specific

Breakpoint on Method

* In SE80, open class CL_GUI_ALV_GRID
* Right-click method SET_TABLE_FOR_FIRST_DISPLAY
* Create breakpoint → won't stop on every call

Watchpoints

Watchpoints stop execution when a variable changes:

DATA: lv_counter TYPE i.

DO 100 TIMES.
  lv_counter = sy-index.
ENDDO.
Setting a watchpoint:
  1. Start debugging (/h)
  2. Double-click LV_COUNTER in variable display
  3. Right-click → Create watchpoint
  4. Debugger stops when LV_COUNTER changes value

Debugging Internal Tables

Internal tables are the most common data structure in ABAP:

TYPES: BEGIN OF ty_data,
         matnr TYPE matnr,
         menge TYPE menge_d,
       END OF ty_data.

DATA: gt_data TYPE TABLE OF ty_data,
      gs_data TYPE ty_data.

DO 10 TIMES.
  gs_data-matnr = |MAT-{ sy-index }|.
  gs_data-menge = sy-index * 100.
  APPEND gs_data TO gt_data.
ENDDO.

BREAK-POINT.

LOOP AT gt_data INTO gs_data
     WHERE menge > 500.
  WRITE: / gs_data-matnr, gs_data-menge.
ENDLOOP.

In debugger: double-click GT_DATA to see all 10 rows, use the table viewer to find specific entries, right-click to change values.

Debugging Function Modules and BAPIs

When debugging a program that calls function modules:

CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
  EXPORTING
    head_data    = ls_head
  TABLES
    clientdata   = lt_client
    return       = lt_return.

Set a breakpoint before the CALL FUNCTION. Press F5 (single step) to step into the function module. Use F6 to execute it and skip the internal logic. Use F7 to return if you accidentally stepped too deep.

Runtime Analysis (SE30)

For performance debugging, use transaction SE30 (SAT for newer releases):

flowchart LR
  A["Start
Runtime Analysis"] --> B["Execute
Transaction"] B --> C["Stop
Analysis"] C --> D["View Results"] D --> E["Top Time
Consumers"] E --> F["Optimize
Code"] F --> G["Re-run &
Compare"]
Key metrics in Runtime Analysis:
  - Total time (in microseconds)
  - Database time (SELECT, INSERT, UPDATE)
  - ABAP processing time
  - Number of database calls
  - Number of internal table accesses

Common Debugging Techniques

Finding Where a Value Comes From

1. Set breakpoint at the problematic statement
2. Use F5 to step back through the call stack
3. Use "Call stack" tab to see which program called which
4. Inspect variables at each level

Changing Values During Debugging

1. Double-click the variable in the variable pane
2. Right-click → Change value
3. Enter new value
4. Press F8 to continue with modified data

Real-World Scenario: Fixing a Pricing Error

  1. Customer complains invoice has wrong price
  2. Debug the pricing routine in VOFM (pricing copy routine)
  3. Set external breakpoint in the pricing formula
  4. Create a test sales order — debugger activates
  5. Step through each line of the formula
  6. Discover that a condition record has a wrong date range
  7. Fix the condition record in VK11
  8. Change the price in debugger to verify the corrected calculation

Common Errors

1. Forgetting to Remove Hard-Coded Breakpoints

BREAK-POINT statements left in production code stop the program for every user. Search for BREAK-POINT in transports before release.

2. Debugger Performance Impact

Debugging slows the system significantly. Do not debug on production or during peak hours.

3. Not Using External Breakpoints Correctly

External breakpoints stop all users when the line is hit. Use them only on development or quality systems.

4. Incorrect Watchpoint Scope

A watchpoint on a local variable only works while that method is active. Once the method ends, the watchpoint disappears.

5. Overlooking the Call Stack

When a program crashes, the call stack shows the exact sequence of calls leading to the error. Always check it before investigating variables.

6. Debugging in Production

SAP strongly discourages debugging in production. If necessary, use ST05 (SQL trace) or SAT (runtime analysis) instead, which are read-only.

Practice Questions

  1. What does /h do in SAP GUI? Activates the debugger before the next transaction executes. Type /h in any command field.

  2. What is the difference between F5 and F6 in debugger? F5 (single step) steps into called modules. F6 (execute) steps over them.

  3. What is a watchpoint? A breakpoint that triggers when a variable's value changes — useful for finding where a value gets modified.

  4. What is an external breakpoint? A breakpoint that stops all users at a specific line, not just the current session.

  5. What transaction runs runtime analysis? SE30 or SAT — measures execution time and database access for performance optimization.

Challenge: A custom ABAP report processes 500,000 sales orders but takes 6 hours to complete. Use runtime analysis to identify the bottleneck, propose three optimization strategies, and calculate the expected time improvement.

FAQ

Can I debug in a production system?

Technically yes, but it is strongly discouraged. Use ST05 (SQL trace) or SAT (runtime analysis) for production analysis instead.

What is the old debugger vs new debugger?

The new debugger (default in SAP NetWeaver 7.0+) has a richer interface with table display, call stack, and variable visualization. The old debugger is simpler. Toggle with Ctrl+F5.

How do I debug a background job?

Set an external breakpoint before scheduling the job. The debugger activates when the job hits the breakpoint under your user ID.

What is the debugger call stack?

A list of all active method/function calls leading to the current line. Use it to understand the program flow from entry point to current position.

Can I debug Web Dynpro applications?

Yes. Use /h before executing the Web Dynpro application URL, or set breakpoints in SE80 for Web Dynpro components.

**Durga Antivirus Pro** uses ABAP debugging-style trace logging in its scanning engine — each scan creates a detailed "trace" (analogous to a debugger log) showing which signatures were checked, what was found, and what action was taken, enabling support teams to diagnose false positives.

What's Next

Tutorial What You'll Learn
SAP ABAP Programming Core ABAP skills before debugging
SAP ALV Reports Build and debug interactive ALV reports

Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. Updated 2026-06-24.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro