Using ABAP Debugger

Objective

After completing this lesson, you will be able to 调试 ABAP 程序

在 ADT 中使用 ABAP 调试器启动

无法解决程序出错这一事实。但是,它们以不同的方式表现出来。当用户启动错误的应用程序时,它可能会崩溃,可能会发生意外情况,或者根本不会发生任何情况。从用户的角度来看,在用户界面级别,无法仅说明发生此错误的方式和原因。

作为开发人员,您需要逐行更仔细地检查程序,以仅确定不同程序变量中的哪些语句和值组合导致错误。这是调试器发挥作用的地方。

ADT 中的调试器是一种重要的诊断工具,可用于分析 ABAP 应用程序。

使用调试器,可以通过在运行时逐步进入程序来确定程序无法正常运行的原因。这样,您就可以查看正在执行的语句以及随着程序继续更改变量值的值。

要使用调试器,首先要决定启动调试进程的位置。一种方法是在源代码中设置断点、运行程序并在设置断点处停止。

调试器中提供的一些功能如下:

ABAP 开发工具 (ADT) 调试器的功能

功能ADT 调试器
设置断点
观察点是(取决于版本)
条件断点
步进代码
显示变量值

使用 ABAP 开发工具 (ADT) 调试 ABAP 程序

使用 ADT 调试 ABAP 程序时,使用调试透视图。这是标准 Eclipse 调试透视图的定制版本,其中包含对调试尤为重要的视图和功能。

含调试特定视图的调试透视图的屏幕截图

调试器透视图的一些重要元素如下:

源代码视图

源代码视图是调试器透视图的中心部分。它显示源代码并突出显示程序中的当前位置。

变量视图

"变量"视图也非常重要。您可以使用此视图显示变量的当前值。

断点视图

"断点"视图显示在"变量"视图旁边(在上图"调试透视图"中未选择)。使用此视图显示、删除或创建断点。断点是程序中正常处理中断的点,系统会向您显示调试器,以便您准确分析程序在该时刻的状态。

导航功能

调试程序时,使用导航功能控制代码的执行。

调试视图

左上方的调试视图显示调试会话和调用层次结构。稍后在调试模块化单元(例如,方法)的调用时需要此操作。

透视图选择器

您可以使用右上角的透视图选择器按钮切换回 ABAP 透视图。

控制代码的执行

一些导航功能

开始调试时,使用导航功能控制代码的执行。

“步入”按钮的屏幕截图
“恢复”按钮的屏幕截图

以下是一些重要的导航功能:

单步跳转 (F5)

选择步入,或选择键盘上的 F5 以执行单个步骤。使用此功能进行逐步分析。例如,如果要查看实际执行了控制结构的哪个代码块。

恢复 (F8)

选择恢复或选择键盘上的 F8 以执行程序直到下一个断点。  如果调试程序没有再遇到任何断点,则程序将在结束时执行,调试会话将终止。

运行至行 (Shift+F8)

选择运行到行,或选择键盘上的 Shift+F8 以执行程序,直到当前光标位置。选择代码行并选择此功能是设置断点、选择恢复并再次移除断点的便捷替代方法。

跳转到行 (Shift+F12)

选择 跳转至行 或选择键盘上的 Shift+F12 跳过某些代码行,或向后跳转到某些已经执行的代码。此功能有助于模拟移除特定代码时会发生的情况,或重复调试第一次分析时丢失的一些代码。请记住,这是跳跃,而不是执行代码。向后跳转时,对数据对象的更改不会还原。

终止

如果已完成调试并且不想执行其余程序,请选择 终止 (红色框图标)。调试会话将立即终止。

显示数据对象的内容

分析调试器中数据对象内容的一种方法是使用 ABAP 编辑器的鼠标悬停功能。在调试模式下,将光标置于数据对象的名称上并稍等片刻。随即打开一个对话框,其中包含数据对象的内容。

在调试器中分析数据对象内容的另一种方法是变量视图。此视图显示数据对象及其当前值的列表。缺省情况下,主列表(即顶级变量)包含一些内置数据对象。在此示例中 SY-SUBRC 和 ME。展开节点 本地 以查看当前处理块中定义的所有变量数据对象的列表。

将数据对象添加到"变量"视图的主列表有三种方法:

  • 在编辑器中,双击数据对象的名称
  • 在变量列表中,左键单击占位符 <Enter variable> 并输入数据对象的名称
  • 右键单击本地节点中的变量,然后选择显示为顶级变量

分析调试器中数据对象内容的一种方法是使用 ABAP 编辑器的鼠标悬停功能。在调试模式下,将光标置于数据对象的名称上并稍等片刻。随即打开一个对话框,其中包含数据对象的内容。

在调试器中分析数据对象内容的另一种方法是变量视图。此视图显示数据对象及其当前值的列表。缺省情况下,主列表(即顶级变量)包含一些内置数据对象。在该示例中,这些是 SY-SUBRC 和 ME。展开节点 本地 以查看当前处理块中定义的所有变量数据对象的列表。

将数据对象添加到"变量"视图的主列表有三种方法:

  • 在编辑器中,双击数据对象的名称
  • 在变量列表中,左键单击占位符 <输入变量> 并输入数据对象的名称
  • 右键单击本地节点中的变量,然后选择显示为顶级变量

下面是提示。要从列表中删除数据对象,请右键单击该数据对象,然后选择"删除"。

观察点

变量上的简单观察点使程序每当该变量的值发生变化时,都会在调试程序中停止。通过添加条件,程序仅在变量的值发生更改且满足条件时停止。

要在变量上设置观察点,请双击源代码显示中的变量,然后右键单击该变量并选择"设置观察点"。这将在此变量上创建观察点,然后您可以在断点视图中看到该观察点。

要向观察点添加条件,请在断点列表中选择该条件,然后在 条件 字段中输入条件。按回车键保存带条件的观察点。

截屏:断点视图中定义的观察点

如果变量的意外值导致问题,则可以在程序执行期间使用观察点跟踪其值。

变量上的简单 Watchpoint 使程序每当该变量的值发生变化时都会在调试程序中停止。通过添加条件,程序不会在变量的每个值更改时停止,而是仅在同时满足条件的情况下停止。

要针对变量设置观察点,仅在调试器中时,突出显示源代码中的变量,然后右键单击该变量并选择"设置观察点"。这会在变量上创建观察点,您可以在断点视图中看到。

选择观察点变量以将条件添加到观察点,在断点列表中将其选中,然后在条件字段中输入条件。选择键盘上的 Enter 保存具有条件的观察点。

要移除观察点,请转到断点视图,右键单击观察点变量,然后选择移除

调试 ABAP 应用程序并设置观察点

业务练习

现在,我们将了解如何设置断点并创建观察点。

注意

在本练习中,XX 是指您的编号。

步骤

  1. 打开类 ZBP_R_XX_GROCERY的本地类 LHC_GROCERY。为字段 lv_expiration 分配值时添加断点。

    1. 双击项目浏览器中的类 ZBP_R_XX_GROCERY

    2. 选择编辑器窗口底部的"局部类型"选项卡。

    3. 要设置断点,请双击行边距:

      lv_expiration = ls_grocery-Expirationdate.
  2. 执行应用程序。

    1. 在项目浏览器中双击服务绑定 ZUI_XX_GROCERY_04 以打开服务绑定。

    2. 在服务版本详细信息下,选择实体集和关联下的杂货

    3. 预览...执行应用程序。

  3. 逐步完成代码并查看变量。

    1. 执行以查看食品杂货清单。如果列表为空,请按 创建 并至少创建一个杂货商品。

    2. 选中杂货商品左侧的复选框,然后按检查过期

    3. Eclipse 中将出现切换到调试透视图的提示。按切换。现在将显示调试透视图。

    4. 要显示 lv_Expiration 的值,请将鼠标悬停在 lv_expiration 行上:

      lv_expiration = ls_grocery-Expirationdate.
    5. 双击 lv_expriation 以添加到窗口右侧的变量列表。

    6. 单步进入 (F5) (单步)。在变量列表中查看 lv_expiration 的更改值。

    7. 逐步完成更多代码并查看您感兴趣的任何变量值。

    8. 要完成,请按恢复 (F8)

      “恢复”按钮的屏幕截图
  4. 为变量创建观察点。

    注意

    要到达观察点,所选杂货商品必须在过去具有过期日期。如果不是这种情况,请单击列表中的杂货品,然后在详细信息屏幕上选择 编辑 并将 失效日期 设置为过去的日期。
    1. 要在变量上创建观察点,请重复之前的步骤,直到输入调试透视图。

    2. 使用鼠标右键单击 lv_expired。选择设置观察点

    3. 在屏幕右上方,从变量标签切换到断点标签。

    4. 双击 lv_expired 并在视图底部添加此条件。

      = abap.true
    5. 按保存 保存 (Ctrl-S)

    6. 恢复 (F8)

  5. 查看观察点变量的旧值和新值。

    1. 变量标签。

    2. 展开监控点 LV_EXIPIRED 值。查看最近值和当前值

  6. 恢复应用程序并切换回 ABAP 透视图

    1. 恢复 (F8)

    2. 按窗口右上角的 ABAP 透视图按钮。

    实践