SAP ABAP 断点调试(三):经典 Debug 场景
简介: Debug 是对程序运行时环境的跟踪和观测,Debug 调试是开发者需要掌握的核心技能,是解决疑难杂症的金钥匙。这是 SAP ABAP 断点调试的第三篇文章,讲解经典 Debug 场景,演示开发和运维中常用的 Debug 工具和技巧,分享我的一些经验。
关键字:SAP
ABAP
Debug
断点调试
BREAK
文章目录
SAP ABAP 断点调试(一):Debug 基础知识
SAP ABAP 断点调试(二):ABAP Debugger(调试器)
SAP ABAP 断点调试(三):经典 Debug 场景
SAP ABAP 断点调试(四):一次完整的 Debug 需求案例演示
1 Debug 消息
面向消息。
通常,程序运行错误的信息通过消息号抛出,如,
此时,我们可以通过消息号准确定位到 Debug 位置。
/H
进入调试界面,
F8
执行,如果运行到满足消息(断点)
条件的位置,就会停止,如,
注意:可以仅输入 msgty 来调试,但这样可能会扩大范围,因此在编码时,尽量不要写 MESSAGE 'XXX' TYPE 'E' 类似的代码。
2 Debug 监控点(观察点)
面向变量。
如果我们期望观测一个变量的值变化,并且在变化时触发停止,此时可以设置监控点实现,例如下述观察字段gt_demo4-seria_t
的值变化,
/H
进入调试界面,
F8
执行,如果运行到值变化的位置,就会停止,如,
监控点(观察点)也经常用在循环中的调试停止。
3 Debug ABAP 命令
面向代码。
识别内置支持的命令(代码片段),触发程序运行停止。
我比较常用的是对 ABAP MEMORY 的跟踪调试,
4 Debug 源代码
面向代码行。
使用 Debug 源代码创建断点的最大的用处是:创建有条件的行断点(条件行断点)。
举个例子,有时我们想在某行打断点,但是希望这个断点要在满足某个条件时才停止,否则不停止。
上述示例代码,
report ytest_lb015.
data:gt_spfli type table of spfli with header line.
start-of-selection.
select * into table gt_spfli from spfli up to 100 rows.
loop at gt_spfli.
* if gt_spfli-carrid = 'SQ'.
write:/ gt_spfli-cityfrom,gt_spfli-cityto.
* endif.
endloop.
5 Debug 脚本
面向脚本。
这是一个能应对更加复杂 Debug 需求的工具,不过一般很少情况需要用到此工具。
以上述代码为例,创建一个脚本,
- 先进入 Debugger
- 编写脚本
- 停止在这里,
脚本工具还能应对很多复杂的调试需求,我们在脚本向导里也看到了很多类型的脚本服务,本例只演示了第一个变量服务。
6 一些特定的 Debug 入口
6.1 GGB0、GGB1、OBBH、OB28
注意:需要在查看状态下才能设置断点。
6.2 弹窗 Debug
- 创建调试命令文本.TXT
"复制以下文本到TXT中保存后即可使用(不包括本行)
[Function]
Command=/H
Type=SystemCommand
- 拖拽 TXT 文档到窗口中,触发任意事件进入调试界面。
6.3 SM37 background Job Debug
- SM37 中勾选一个作业,命令框内输入
JDBG
回车,进入 Debug,
- 回车后,狂按
F7
,直到执行到目标程序,随后进入我们熟悉的常规 Debug,
注意1:运行完毕(已完成)或者正在运行(活动)状态的 JOB 均可进入 Debug。
注意2:作业 Debug 过程相当于执行了一次作业,请注意业务上能不能执行的问题。
6.4 RFC Debug
- SE37 进入 RFC 函数源代码页签,点击菜单栏
实用程序
,设置
,进入如下,
仅标记当前应用服务器
设置该指示器后,外部用户断点在运行时仅适用于设置有此断点的相关应用服务器。如果在另一个应用服务器上处理请求,只要用户与设置断点的用户相匹配,则调试将不会停止。
缺省设置中该指示器关闭。
- 触发 RFC 访问进入 Debug。
注意:用户和仅当前应用服务器设置错误是两个经常不进入断点的原因。
6.5 SM13 更新请求 Debug
- 进入 SM13,双击需要调试的行,进入下一界面在点击调试按钮,
- 进入调试界面后,狂按
F7
,直到执行到目标程序,随后进入我们熟悉的常规 Debug。
6.6 call function in update task
- 设置更新调试
7 什么是条件断点
需要满足触发条件的断点就是条件断点。
如果按照这个定义,那么监控点、消息断点、脚本断点等都属于条件断点。
非常规的,我按照实际开发经验,又将条件断点划分为静态条件断点
和动态条件断点
,
- 静态条件断点
直接在 ABAP 语句中编写条件。 - 动态条件断点
在 ABAP Debugger(调试器)中设置的条件断点。
熟练使用条件断点在实际开发中对工作效率有很大提升。
8 将条件断点静态化
这不是一个工具,是一种工作应用。
- 适配场景
当同一个断点需要被很多次或长期 Debug 的话,我考虑将条件断点静态化,这样可以省去每次都去设置断点的时间,只需用一个是否进入 Debug 的参数控制即可,主打一个方便。 - 条件断点静态化的方式
- 直接将条件 Hard Code 在所需处。
- 创建并保存断点脚本。
9 其他 Debug 场景
后续回头补充…
其他
我的微信群、QQ群和其他发布平台。
长期提供开发和运维服务。