SAP ABAP 断点调试(四):一次完整的 Debug 需求案例演示
Debug 是对程序运行时环境的跟踪和观测,Debug 调试是开发者需要掌握的核心技能,是解决疑难杂症的金钥匙。这是 SAP ABAP 断点调试的第四篇文章,通过一次完整的 Debug 需求案例演示,贯穿需求、过程和成果输出。
·
SAP ABAP 断点调试(四):一次完整的 Debug 需求案例演示
简介: Debug 是对程序运行时环境的跟踪和观测,Debug 调试是开发者需要掌握的核心技能,是解决疑难杂症的金钥匙。这是 SAP ABAP 断点调试的第四篇文章,通过一次完整的 Debug 需求案例演示,贯穿需求、过程和成果输出。
关键字:SAP ABAP Debug 断点调试 BREAK
SAP ABAP 断点调试(一):Debug 基础知识
SAP ABAP 断点调试(二):ABAP Debugger(调试器)
SAP ABAP 断点调试(三):经典 Debug 场景
SAP ABAP 断点调试(四):一次完整的 Debug 需求案例演示
1 Debug 需求
需求描述:在动态编程中,需要主动根据搜索帮助选择一个子例程,以执行目标功能。- 需求示例,如下图所示,

2 Debug 过程
- (1)
FORM 子例程清单没有找到实体存储。 - (2)在程序字段上按 F1,进入技术信息,

- (3)可以找到 POV(process on value-request) 实现,

- (4)继续深入堆栈查找关键实现,

- (5)找到函数
F4_PROG_SUBPROGRAM,
- (6)SE37 测试函数
F4_PROG_SUBPROGRAM,
测试通过! - (7)如果还想继续深入,可以通过 DEBUG 函数
F4_PROG_SUBPROGRAM,最终会来到这里,
- (8)继续 F5 深入,
又跨程序调用了,
子例程列表被存放在内表REPOSITORY[],进入 PERFORM driver_list_output 后发现已经是对数据的输出了,那么我们返回往前找。 - (9)
创建监控点(Watchpoint)查找内表REPOSITORY[]的值变化,
注意创建监控点(Watchpoint)的程序名称和变量需要被程序加载后才能创建成功。 - (10)按 F8 跟踪,得到答案,函数
WB_TREE_GET_OBJECTS。

- (11)测试函数
WB_TREE_GET_OBJECTS,
测试通过!
3 Debug 成果
至此,一共有三种方法可以获得 FORM 子例程清单,对应都可以用来开发搜索帮助。
- (1)使用函数
VALUE_REQUEST_READ',
l_prg = l_field-fieldvalue.
CALL FUNCTION 'VALUE_REQUEST_READ'
EXPORTING
dynpfield = 'DYNP_VARS-SET_BP-FORM'
dynpname = sy-dynnr
progname = l_repid
value_type = 'FRM'
include = l_prg.
- (2)使用函数
F4_PROG_SUBPROGRAM,
CALL FUNCTION 'F4_PROG_SUBPROGRAM'
EXPORTING
object = fieldtab-fieldvalue
program = programmname
IMPORTING
RESULT = fieldtab-fieldvalue
program = new_progname.
- (3)函数
WB_TREE_GET_OBJECTS,
REFRESH ISCOMPO.
CALL FUNCTION 'WB_TREE_GET_OBJECTS'
EXPORTING
OTYPE = L_TYPE
PROGRAM = PROG1
TABLES
OLIST = ISCOMPO.
* globale Daten selektieren
DESCRIBE TABLE KEY2 LINES LINE.
IF NOT LINE IS INITIAL.
LOOP AT ISCOMPO
WHERE NOT NAME IN KEY2.
DELETE ISCOMPO.
ENDLOOP.
ENDIF.
LOOP AT ISCOMPO. " Datentabelle füllen
MOVE PROG1 TO REPOSITORY-PROGRAM.
MOVE ISCOMPO-INCL TO REPOSITORY-INCLUDE.
MOVE ISCOMPO-NAME TO REPOSITORY-FORM.
APPEND REPOSITORY.
ENDLOOP.
DESCRIBE TABLE REPOSITORY LINES SY-TABIX.
IF SY-TABIX = 0. EXIT. ENDIF.
IF SY-TABIX > LOOPC AND LOOPC NE SPACE.
L_LOOPC = LOOPC + 1.
LOOP AT REPOSITORY FROM L_LOOPC.
DELETE REPOSITORY.
ENDLOOP.
ENDIF.
* endif.
SORT REPOSITORY BY PROGRAM FORM.
其他
我的微信群、QQ群和其他发布平台。
长期提供开发和运维服务。
更多推荐


所有评论(0)