SAP ABAP 断点调试(三):经典 Debug 场景

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群和其他发布平台。

长期提供开发和运维服务。

猜你喜欢

转载自blog.csdn.net/libin961797440/article/details/131656417
今日推荐