原文链接:Debugging an ABAP Program
ADT 中的调试器是一个重要的诊断工具,可用于分析 ABAP 应用程序。
使用调试器,您可以通过在运行时 Debug 单步执行(F5)程序来确定程序无法正常工作的原因。这使您可以看到正在执行的语句以及随着程序的进行而变量值的变化。
要使用调试器,您首先决定从哪里开始调试过程。一种方法是在源代码中设置断点,运行程序并在设置的断点处停止。
调试器中可用的一些功能如下:
ADT调试器的特点
Feature 特征 | ADT Debugger |
---|---|
设置断点 | Yes |
观察点 | Yes (Depending on release) 是(取决于版本) |
条件断点 | Yes |
单步执行代码 | Yes |
显示变量值 | Yes |
分析内表 | 可以在ABAP内部表视图中显示和编辑内表行,但可以自定义该视图 |
显示结构 | 可以按字段显示结构,但无法自定义视图。 |
显示对象 | 支持对象内容的结构化显示,但不提供自定义对象工具的数据显示的功能。 |
比较数据对象 | 不适用于复杂的数据对象 |
分析内存使用情况 | No |
调试器脚本 | No |
更改调试器设置 | Yes |
在调试器中直接编辑代码 | Yes |
使用 ADT 调试 ABAP 程序
当您使用 ADT 调试 ABAP 程序时,您将使用"调试"透视图。这是标准 Eclipse 调试透视图的定制版本,它包含对于调试特别重要的视图和功能。
调试器视角的一些重要元素如下:
- Source Code View:源代码视图是调试器透视图的中心部分。它显示源代码并突出显示程序中的当前位置。
- Variables View:变量视图也非常重要。您可以使用此视图来显示变量的当前值。
- Breakpoints View:Breakpoints 视图显示在 Variables 视图旁边(在上图中"调试透视图"中未选择)。您可以使用此视图来显示、删除或创建断点。断点是程序中正常处理被中断的点,系统会向您显示调试器,以便您可以分析程序在该时刻的状态。
- Navigation Functions:在调试程序时,您可以使用导航函数来控制代码的执行。
- Debug View:左上角的"调试"视图显示调试会话和调用层次结构。稍后当您调试模块化单元(例如方法)的调用时,您将需要它。
- Perspective Selector:您可以使用右上角的透视选择器按钮切换回 ABAP Perspective Selector。
控制代码的执行
当开始调试时,使用导航函数来控制代码的执行。一些重要的导航功能如下:
- Step Into (F5):选择单步执行,或选择键盘上的 F5 以执行单个步骤。使用此功能进行逐步分析。例如,如果您想查看实际执行了控制结构的哪个代码块。
- Resume (F8):选择"Resume"(恢复),或选择键盘上的"F8"以执行程序直到下一个断点。如果调试器不再命中任何断点,则程序将执行到底并且调试会话终止。
- Run to Line (Shift+F8)
选择"Run to Line",或选择键盘上的"Shift+F8",将程序执行到当前光标位置。选择代码行并选择此函数是设置断点、选择"恢复"并再次删除断点的便捷替代方法。
- Jump to Line (Shift+F12)
选择"Jump to Line"或选择键盘上的 Shift+F12 可跳过某些代码行或向后跳转到某些已执行的代码。此功能有助于模拟删除某段代码时会发生的情况,或者重复调试您第一次错过分析的一些代码。请记住,这是跳转,而不是执行代码。当向后跳转时,对数据对象的更改不会恢复。
- Terminate
如果调试完毕并且不想执行剩余的程序,请选择"终止"(红框图标)。调试会话立即终止。
Watchpoints
如果变量得到一个意想不到的值,您可以使用观察点在程序执行过程中跟踪其值。
变量上的简单观察点会导致程序在该变量的值发生更改时在调试器中停止。通过添加条件,程序不会在变量的每次值更改时停止,而是仅在条件也满足的情况下停止。
要在变量上设置观察点,只需在调试器中突出显示源代码中的变量,然后右键单击它并选择"设置观察点"。这会在变量上创建一个观察点,您可以在"断点"视图中看到该观察点。
选择观察点变量以向观察点添加条件,在断点列表中选择它,然后在条件字段中输入条件。选择键盘上的 Enter 以保存带有条件的观察点。
要删除观察点,请转至断点视图,右键单击观察点变量,然后选择删除。
创建 ABAP 应用程序
- 创建一个类。
- 右键单击您的包。
- 选择 New → ABAP Class.
- 命名一个程序并添加描述。
- 在名称字段中,输入
ZCL_S4D100_DEBUG
。 - 在描述字段中,输入
Debug Program
。 - 选择下一步。
- 选择运输请求,然后选择完成。
- 在公共部分定义接口。
在公共部分中定义接口: IF_OO_ADT_CLASSRUN
。
- 将代码添加到程序中。
- 使用
D0-ENDDO
循环和WRITE
语句将以下循环代码添加到程序中。 - 您可以通过
LV_NUMBER1
使用DO-ENDDO
循环,并通过语句OUT->WRITE( lv_number1 )
输出结果。 编写代码时,应考虑以下事项:WRITE
和左括号之间没有空格- 左括号后至少有一个空格
- 右括号前至少有一个空格
- 该行末尾有一个句点
- 激活程序并清除控制台。
- 激活您的程序。
- 按 F9 运行应用程序。
- 选择右上角行中的"清除控制台"按钮以清除控制台内容。
调试程序并设置观察点
- 双击程序
ZCL_S4D100_DEBUG
,将代码更改为如下图所示,然后激活该程序。
在第 16 行设置断点。要在第 16 行设置断点,请双击该代码行的列号左侧,或右键单击列号左侧,然后选择"Toggle Breakpoint"以在以下位置设置断点: 16 行处。
结果:
- 执行应用程序。
通过执行 F9(在键盘上)来执行应用程序。蓝色箭头和突出显示的行(第 16 行)指示该语句。
双击变量 LV_NUMBER1
(展开局部节点)。
- 执行代码。
按键盘上的 F5(单步)查看 LV_NUMBER2 的值从 0 更改为 3。
按 F8(Resume)按钮。
- 清除内容。
请注意,输出显示在 ABAP 控制台中。您可以通过选择控制台工具栏上的"Clear Console"按钮来清除内容。
- 为变量创建观察点。
要在变量上创建观察点,您必须位于调试器中。 在第 16 行设置断点。
通过选择 F9(在键盘上)来执行程序。
在调试器中,突出显示变量 LV_NUMBER1
并右键单击它,然后选择"Set Watchpoint"。
- 选择断点列表中的变量。
- 双击变量
LV_NUMBER1
。 - 选择 Breakpoints 选项卡。
- 如果"Breakpoints "选项卡未自动显示,请选择"Breakpoints"按钮。
- 此时,您可以添加条件。
- 双击变量
LV_NUMBER1
。 - 添加条件 (
= 6
) 并通过选择保存来保存条件。(注意:=
和6
之间有一个空格)
保存成功:
- 在观察点停止调试器。
- 在 ABAP 编辑器中双击变量
LV_NUMBER1
。 - 按键盘上的 F5(Step Into)。
- 选择 Variables 选项卡。
- 展开观察点
LV_NUMBER1
,并注意变量LV_NUMBER2
已更改为 3。
- 按键盘上的 F8 resume 按钮。
结果:当 LV_NUMBER1
等于 6 时,观察点停止。