λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ§‘‍πŸ’Ό SAP/ABAP

[SAP ABAP] Watchpoint λž€? μ‚¬μš©λ²•

by Jay Din 2026. 8. 4.
728x90
λ°˜μ‘ν˜•

SAP ABAP 개발 λ˜λŠ” 뢄석을 ν•˜λ‹€ 보면 νŠΉμ • λ³€μˆ˜μ˜ 값이 μ–Έμ œ λ³€κ²½λ˜λŠ”μ§€, μ–΄λ–€ μ‘°κ±΄μ—μ„œ λ³€κ²½λ˜λŠ”μ§€ 좔적해야 ν•˜λŠ” 상황이 자주 λ°œμƒν•©λ‹ˆλ‹€.

이럴 λ•Œ μœ μš©ν•œ 것이 λ°”λ‘œ Watchpoint μž…λ‹ˆλ‹€.

일반 λΈŒλ ˆμ΄ν¬ν¬μΈνŠΈκ°€ "νŠΉμ • 라인"μ—μ„œ μ •μ§€ν•˜λŠ” 것과 달리, WatchpointλŠ” "νŠΉμ • κ°’μ˜ λ³€ν™”"λ₯Ό κ°μ§€ν•˜μ—¬ μ •μ§€ν•˜λŠ” 디버깅 λ„κ΅¬μž…λ‹ˆλ‹€.

 

1. Watchpoint λž€?

WatchpointλŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 νŠΉμ • λ³€μˆ˜μ˜ 값이 λ³€κ²½λ˜κ±°λ‚˜ νŠΉμ • 쑰건을 λ§Œμ‘±ν•˜λŠ” μˆœκ°„ μžλ™μœΌλ‘œ 싀행을 μ •μ§€μ‹œν‚€λŠ” 디버깅 κΈ°λŠ₯μž…λ‹ˆλ‹€.

 

일반 브레이크 ν¬μΈνŠΈμ™€μ˜ 차이

ꡬ뢄 Breakpoint (일반) Watchpoint (κ°μ‹œμ )
μ •μ§€ κΈ°μ€€ νŠΉμ • μ½”λ“œ 라인 λ³€μˆ˜ κ°’ λ³€κ²½ or 쑰건 만쑱
μ‚¬μš© μ‹œμ  νŠΉμ • 둜직 μœ„μΉ˜ νŒŒμ•… μ‹œ κ°’ λ³€κ²½ μ‹œμ  좔적 μ‹œ
μœ„μΉ˜ μ§€μ • 라인 번호 μ§€μ • λ³€μˆ˜λͺ… μ§€μ •
μ‹€ν–‰ 속도 영ν–₯ μ—†μŒ λ§€ μŠ€ν…λ§ˆλ‹€ κ°’ 체크 (λ‹€μ†Œ 느림)
μ €μž₯ μ—¬λΆ€ ν”„λ‘œκ·Έλž¨μ— μ €μž₯ κ°€λŠ₯ μ„Έμ…˜ μ’…λ£Œ μ‹œ μ‚­μ œ

 

Watchpointκ°€ μœ μš©ν•œ 상황

  • λ³€μˆ˜ 값이 μ–΄λ””μ„œ 잘λͺ» λ³€κ²½λ˜λŠ”μ§€ λͺ¨λ₯Ό λ•Œ
  • νŠΉμ • 값에 λ„λ‹¬ν•˜λŠ” μ‹œμ μ„ μ°Ύκ³  싢을 λ•Œ
  • μ—¬λŸ¬ κ³³μ—μ„œ 값이 λ°”λ€Œμ–΄ μš°λ„ˆμΈ νŒŒμ•…μ΄ μ–΄λ €μšΈ λ•Œ
  • LOOP μ•ˆμ—μ„œ νŠΉμ • 쑰건 만쑱 μ‹œμ λ§Œ ν™•μΈν•˜κ³  싢을 λ•Œ

 

2. Watchpoint 생성 방법

디버깅 λͺ¨λ“œ μ§„μž… ν›„
   ↓
상단 메뉴: [Breakpoints] → [Create Watchpoint]
λ˜λŠ” 단좕킀: [Shift + F4]
   ↓
Create Watchpoint λ‹€μ΄μ–Όλ‘œκ·Έ ν‘œμ‹œ

 

3. Watchpoint 각 ν•„λ“œ 상세 μ„€λͺ…

좜처: https://sap-learn-more.com/abap-watchpoint-%EC%82%AC%EC%9A%A9%EB%B2%95/

3-1) Variable (λ³€μˆ˜)

ν•„λ“œ μœ„μΉ˜: ν™”λ©΄ μ΅œμƒλ‹¨

의미: κ°μ‹œν•  λ³€μˆ˜λͺ…을 μž…λ ₯ν•˜λŠ” ν•„λ“œ

Variable: [ lv_pspnr ]

 

μž…λ ₯ κ°€λŠ₯ ν˜•νƒœ:

ν˜•νƒœ μ˜ˆμ‹œ μ„€λͺ…
λ‹¨μˆœ λ³€μˆ˜ lv_count 단일 λ³€μˆ˜ κ°μ‹œ
ꡬ쑰체 ν•„λ“œ ls_data-status ꡬ쑰체의 νŠΉμ • ν•„λ“œ κ°μ‹œ
인터널 ν…Œμ΄λΈ” gt_result ν…Œμ΄λΈ” 전체 κ°μ‹œ
μ „μ—­ λ³€μˆ˜ gv_flag μ „μ—­ λ³€μˆ˜ κ°μ‹œ
μ‹œμŠ€ν…œ λ³€μˆ˜ sy-subrc μ‹œμŠ€ν…œ λ³€μˆ˜ κ°μ‹œ

 

μ£Όμ˜μ‚¬ν•­:

  • λŒ€μ†Œλ¬Έμž ꡬ뢄 μ—†μŒ (ABAP은 기본적으둜 λŒ€μ†Œλ¬Έμž λ¬΄μ‹œ)
  • μŠ€μ½”ν”„μ— μ‘΄μž¬ν•˜λŠ” λ³€μˆ˜λ§Œ κ°μ‹œ κ°€λŠ₯
  • μ˜€νƒ€ μ‹œ 였λ₯˜ λ°œμƒ

 

3-2) Program Name (ν”„λ‘œκ·Έλž¨λͺ…)

의미: Watchpointκ°€ 적용될 ν”„λ‘œκ·Έλž¨λͺ… (μžλ™μœΌλ‘œ ν˜„μž¬ ν”„λ‘œκ·Έλž¨λͺ…이 μž…λ ₯됨)

Program Name: [ ZTEST ]

 

μž‘λ™μ›λ¦¬:

  • μ§€μ •λœ ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œλ§Œ Watchpointκ°€ ν™œμ„±ν™”
  • λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μœΌλ‘œ μ΄λ™ν•˜λ©΄ Watchpointκ°€ μ€‘λ‹¨λ˜μ§€ μ•ˆνžžλ§Œ, ν•΄λ‹Ή λ³€μˆ˜κ°€ μ—†μœΌλ©΄ μžλ™ λ¬΄μ‹œ
  • μ„œλΈŒλ£¨ν‹΄, Function Module λ“± λ‹€λ₯Έ μ»¨ν…μŠ€νŠΈμ—μ„œλ„ 같은 μ΄λ¦„μ˜ λ³€μˆ˜κ°€ 있으면 κ°μ‹œ

 

3-3) Watchpoint Type

β‘  Watchpoint at Variable (λ³€μˆ˜ κ°μ‹œμ )

의미: ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 λ³€μˆ˜μ˜ 값이 λ³€κ²½λ˜λŠ” μˆœκ°„ μ •μ§€

β—‰ Watchpoint at Variable
    - Monitor the Variable During the Program Run
    - Stop Immediately When Value of Variable Changes

 

μž‘λ™ 원리:

  • ABAP λŸ°νƒ€μž„μ΄ λ§€ μŠ€ν…λ§ˆλ‹€ μ§€μ •λœ λ³€μˆ˜μ˜ 값을 체크
  • 이전 κ°’κ³Ό ν˜„μž¬ 값을 비ꡐ
  • 값이 달라진 μˆœκ°„ μ¦‰μ‹œ μ •μ§€

 

β‘‘ Watchpoint at Object Attribute (객체 속성 κ°μ‹œμ )

의미: 객체(Object) μΈμŠ€ν„΄μŠ€μ˜ 속성(Attribute) 값이 λ³€κ²½λ˜λŠ” μˆœκ°„ μ •μ§€

β—‹ Watchpoint at Object Attribute
    - Monitor the Object During the Program Run
    - Stop Immediately When One of the Selected Attributes
      of the Objects Changes or Vanishes

 

μž‘λ™ 원리:

  • νŠΉμ • 객체 μΈμŠ€ν„΄μŠ€μ˜ μ—¬λŸ¬ 속성을 λ™μ‹œ κ°μ‹œ
  • κ°μ‹œ λŒ€μƒ 속성 쀑 ν•˜λ‚˜λΌλ„ λ³€κ²½λ˜λ©΄ μ •μ§€
  • 객체가 μ†Œλ©Έ(CG)될 λ•Œλ„ 감지 κ°€λŠ₯

 

μ–Έμ œ μ‚¬μš©?

  • 클래슀 기반 ν”„λ‘œκ·Έλž¨ 디버깅
  • 객체의 μƒνƒœ λ³€ν™” 좔적
  • 닀쀑 속성 λ™μ‹œ κ°μ‹œ ν•„μš” μ‹œ

 

3-4) Additional Type Dependent Specifications

Variable Type (λ³€μˆ˜ νƒ€μž…)

의미: κ°μ‹œ λŒ€μƒ λ³€μˆ˜μ˜ 데이터 νƒ€μž… μ§€μ •

Variable Type: [        ]

 

μž‘λ™ 원리:

  • μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ μžλ™ 인식
  • νŠΉμ • νƒ€μž…λ§Œ κ°μ‹œν•˜κ³  싢을 λ•Œ λͺ…μ‹œμ  μ§€μ •
  • 동일 μ΄λ¦„μ˜ λ³€μˆ˜κ°€ μ—¬λŸ¬ νƒ€μž…μœΌλ‘œ μ‘΄μž¬ν•  λ•Œ κ΅¬λΆ„μš©

 

3-5) All Module Instances (κΈ°λ³Έκ°’)

의미: μ§€μ •λœ μ§€μ—­ λ³€μˆ˜λ₯Ό λͺ¨λ“  λͺ¨λ“ˆ μΈμŠ€ν„΄μŠ€μ—μ„œ κ°μ‹œ

β—‰ All Module Instncs.

 

μž‘λ™ 원리:

  • Form/Methodκ°€ μ—¬λŸ¬ 번 호좜되면 각 ν˜ΈμΆœλ§ˆλ‹€ μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€ 생성
  • 이 μ˜΅μ…˜μ€ λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ˜ μ§€μ—­ λ³€μˆ˜λ₯Ό κ°μ‹œ
  • LOOP μ•ˆμ—μ„œ 박볡 ν˜ΈμΆœλ˜λŠ” μ„œλΈŒλ£¨ν‹΄ 디버깅에 유용

 

β‘‘ Only Current Module Instance

의미: ν˜„μž¬ μ‹€ν–‰ 쀑인 λͺ¨λ“ˆ μΈμŠ€ν„΄μŠ€μœΌ μ§€μ—­ λ³€μˆ˜λ§Œ κ°μ‹œ

β—‹ Only Current Module Instance

 

μž‘λ™ 원리:

  • ν˜„μž¬ μ»¨ν…μŠ€νŠΈμ˜ μΈμŠ€ν„΄μŠ€λ§Œ κ°μ‹œ
  • λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€μ—μ„œ λ°œμƒν•˜λŠ” κ°’ 변경은 λ¬΄μ‹œ
  • νŠΉμ • 호좜 μ»¨ν…μŠ€νŠΈλ§Œ 좔적 μ‹œ 유용

 

μ–Έμ œ μ‚¬μš©?

  • μž¬κ·€ 호좜 디버깅
  • νŠΉμ • μ„œλΈŒλ£¨ν‹΄ 호좜만 μΆ”μ ν•˜κ³  싢을 λ•Œ
  • 반볡 호좜 쀑 νŠΉμ • μΈμŠ€ν„΄μŠ€λ§Œ 관심 μžˆμ„ λ•Œ

 

3-6) Condition (쑰건)

Watchpoint의 μ •μ§€ 쑰건을 μ„Έλ°€ν•˜κ²Œ μ§€μ •ν•  수 μžˆλŠ” μ˜μ—­μ΄λΉ„λ‹€.

 

Free Condition Entry (자유 쑰건 μž…λ ₯)

의미: μ •μ§€ 쑰건을 자유둭게 ABAP ν‘œν˜„μ‹œμœΌλ‘œ μž…λ ₯

Condition:
  Free Condition Entry: [ lv_pspnr = '1234' ]

 

μž‘λ™ 원리:

  • λ³€μˆ˜ 값이 변경될 λ•Œλ§ˆλ‹€ 이 쑰건 평가
  • 쑰건이 TRUE일 λ•Œλ§Œ μ •μ§€
  • 쑰건이 FALSEλ©΄ 계속 μ‹€ν–‰

 

ν‘œν˜„μ‹ μ˜ˆμ‹œ:

쑰건 ν‘œν˜„μ‹ 의미
lv_pspnr = '1234' 값이 '1234'일 λ•Œ μ •μ§€
lv_count > 100 값이 100 초과 μ‹œ μ •μ§€
ls_data-status = 'E' μƒνƒœκ°€ 'E'일 λ•Œ μ •μ§€
lv_flag = 'X' AND lv_type = 'A' μ—¬λŸ¬ 쑰건 λ™μ‹œ 만쑱 μ‹œ
sy-tabix = 10 10번째 반볡 μ‹œ μ •μ§€

 

μ£Όμ˜μ‚¬ν•­:

λ¬Έμžμ—΄μ€ λ°˜λ“œμ‹œ ν™‘λ”°μ˜΄ν‘œλ‘œ 감싸야 ν•©λ‹ˆλ‹€.

βœ… μ˜¬λ°”λ¦„: lv_pspnr = 'abcd'
❌ 였λ₯˜:   lv_pspnr = abcd

 

μˆ«μžλŠ” ν™‘λ”°μ˜΄ν‘œ 없이 μž…λ ₯ν•©λ‹ˆλ‹€.

βœ… μ˜¬λ°”λ¦„: lv_count > 100
❌ 였λ₯˜:   lv_count > '100'

 

4. Watchpoint λ‚΄λΆ€ μž‘λ™ 원리

4-1) κ°’ Watchpoint λ©”μ»€λ‹ˆμ¦˜

[ν”„λ‘œκ·Έλž¨ μ‹€ν–‰]
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ABAP λŸ°νƒ€μž„ μŠ€ν… μ‹€ν–‰     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ λ§€ μŠ€ν…λ§ˆλ‹€ κ°μ‹œ λ³€μˆ˜ κ°’  β”‚
β”‚ 이전 κ°’κ³Ό 비ꡐ            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β–Ό
   <κ°’ λ³€κ²½?>
       β”‚
   β”Œβ”€β”€β”€β”΄β”€β”€β”€β”
  YES     NO → 계속 μ‹€ν–‰
   β”‚
   β–Ό
<Free Condition 있음?>
   β”‚
β”Œβ”€β”€β”΄β”€β”€β”
YES   NO → μ¦‰μ‹œ μ •μ§€
β”‚
β–Ό
<쑰건 평가 TRUE?>
β”‚
β”Œβ”€β”€β”΄β”€β”€β”
YES   NO → 계속 μ‹€ν–‰
β”‚
β–Ό
[디버거 μ •μ§€]

 

4-2) κ°μ‹œ λŒ€μƒλ³„ 처리 방식

λ‹¨μˆœ λ³€μˆ˜ κ°μ‹œ:

이전 κ°’ μ €μž₯ → λ§€ μŠ€ν… 비ꡐ → λ‹€λ₯΄λ©΄ μ •μ§€

 

ꡬ쑰체 ν•„λ“œ κ°μ‹œ:

ꡬ쑰체의 νŠΉμ • μ˜€ν”„μ…‹ κ°’λ§Œ 비ꡐ
→ λ‹€λ₯Έ ν•„λ“œκ°€ λ³€κ²½λ˜μ–΄λ„ κ°μ‹œ λŒ€μƒ ν•„λ“œκ°€ κ·ΈλŒ€λ‘œλ©΄ μ •μ§€ μ•ˆν•¨

 

인터널 ν…Œμ΄λΈ” κ°μ‹œ:

ν…Œμ΄λΈ” 전체 λ‚΄μš© 비ꡐ
→ APPEND, INSERT, DELETE, MODIFY λͺ¨λ‘ 감지
→ λŒ€μš©λŸ‰ ν…Œμ΄λΈ”μ€ μ„±λŠ₯ μ €ν•˜ 심함

 

객체 속성 κ°μ‹œ:

νŠΉμ • μΈμŠ€ν„΄μŠ€μ˜ 속성 λ©”λͺ¨λ¦¬ μ£Όμ†Œ κ°μ‹œ
→ μΈμŠ€ν„΄μŠ€ μ†Œλ©Έ μ‹œμ—λ„ 감지 κ°€λŠ₯

 

5. Watchpoint의 νŠΉμ§•

5-1) νœ˜λ°œμ„± (Session-based)

WatchpointλŠ” 디버깅 μ„Έμ…˜ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•©λ‹ˆλ‹€.

디버거 μ’…λ£Œ → Watchpoint μžλ™ μ‚­μ œ
μƒˆ μ„Έμ…˜ μ‹œμž‘ → λ‹€μ‹œ μ„€μ • ν•„μš”

일반 브레이크포인트처럼 SAP μ‹œμŠ€ν…œμ— 영ꡬ μ €μž₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

5-2) μ„±λŠ₯ 영ν–₯

Watchpointλ₯Ό 많이 μ„€μ •ν•˜λ©΄ μ‹€ν–‰ 속도가 λŠλ €μ§‘λ‹ˆλ‹€.

Watchpoint 개수 ↑
→ λ§€ μŠ€ν…λ§ˆλ‹€ 체크할 λ³€μˆ˜ 개수 ↑
→ μ‹€ν–‰ 속도 ↓
→ λŒ€λŸ‰ 데이터 처리 μ‹œ 특히 느림

ꢌμž₯ 사항:

  • λ™μ‹œμ— μ—¬λŸ¬ 개 μ„€μ • μ§€μ–‘
  • μ‚¬μš© ν›„ μ¦‰μ‹œ μ‚­μ œ
  • ν•„μš”ν•œ λΆ€λΆ„λ§Œ κ΅­μ†Œμ μœΌλ‘œ μ‚¬μš©

 

5-3) μŠ€μ½”ν”„ μ œν•œ

ν˜„μž¬ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•œ λ³€μˆ˜λ§Œ κ°μ‹œ κ°€λŠ₯
→ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ˜ μ§€μ—­ λ³€μˆ˜ κ°μ‹œ λΆˆκ°€
→ μ „μ—­ λ³€μˆ˜λŠ” μ–΄λ””μ„œλ“  κ°μ‹œ κ°€λŠ₯

 

 

728x90
λ°˜μ‘ν˜•