SAP 包含各种事务码、代码和数据。数据存储在表中,交易代码在后端有 ABAP 程序。调试的字面意思是,使某物(当前讨论中的程序)无错误。但这只是调试的一个方面。

通过调试,我们可以分析程序,了解流逻辑,最重要的是找出任何问题的根本原因。尽管调试是 ABAP 顾问的明显任务,但调试知识对功能顾问有很大帮助。这将节省他们分析和解决问题的时间,减少 ABAP 团队的过度依赖,有助于工作量估算。

Debugging 介绍

Debugging “调试 ”是一个与编程直接相关的术语。它是所有软件专业人员使用的通用术语,与语言和平台无关。“调试”,顾名思义,就是用来调试程序(debug the program)。换句话说,调试就是慢动作、一步一步地执行程序,这样人们就能仔细发现程序/软件是如何工作的。

通常情况下,调试是用来找出程序/软件不工作的原因!调试通常用于修复程序中的错误,但在 SAP 中,调试总是用于理解程序本身的流程。

多年来,“调试 ”一直是软件行业的重要讨论和开发重点。然而,在某些语言中,修复错误仍然是一场噩梦。

在 SAP 中,调试是一项非常简单的任务。在 SAP 中,有多种调试程序的方法,此外,人们还可以知道执行过程中的变量值,这对编程专业人员来说是一个很大的帮助。

本博客旨在概述 SAP 中的各种调试技术。本文主要关注 SAP 功能顾问和 ABAP 学习者。对于 ABAP 专家顾问来说,本文档可能并不完全有用,但可以提供一些见解。

传统调试

SAP 中的调试器可以在执行程序前在命令栏中键入“/h ”来启动。通常情况下,所有报表程序都有选择屏幕。大部分程序代码会在选择屏幕显示后执行,因此可以在选择屏幕显示后安全地开始调试。如果需要调试在选择屏幕之前就已执行的部分代码,则不建议使用此方法启动调试。此方法不适用于无选择屏幕的报表。如果需要在显示第一个屏幕后调试程序,也可使用此方法调试 SAP 模块池。

在这里插入图片描述
输入“/h ”后,按回车键,将显示以下信息。

在这里插入图片描述
执行并开始调试。调试开始后,将显示以下窗口。

在这里插入图片描述

在详细介绍之前,有必要先讨论一下 “断点(BREAK-POINT)”一词。断点是一种在代码的特定行停止执行并开始调试的技术。

有四种不同的方法可以让你分析程序的源代码:

在这里插入图片描述

调试模式下的执行类型:

  • 单步 (F5):使用该选项逐条执行程序语句。这样可以分支到其他程序单元。
  • 执行 (F6):使用该选项可逐行处理程序。当前行上的所有语句都将在一个步骤中处理完毕。这样就可以处理整个程序。
  • 返回 (F7):调试器返回到将控制权传回主程序的位置。使用该选项可从其他程序单元返回。
  • Continue (F8)(继续):使用该选项处理程序到下一个断点。如果程序中不再有断点,系统将退出调试模式并正常执行程序的其余部分。
  • Watch-point: 一旦设置,可以对变量设置观察点。每当该变量的值发生变化或达到预定义值时,系统就会停止调试模式下的执行。

上述 5 个选项的唯一例外是硬中断点或软中断点。如果已经设置了硬中断点或软中断点,那么无论选择哪个选项,程序都会在该点停止。

双击变量可获取变量的当前值。值和变量都会显示在调试窗口的底部。可以更改变量值以测试特定场景。这是由授权控制的。在生产系统中拥有这种权限是非常危险的。要更改变量值,请在下面的窗口中输入变量的新值,然后点击更改图标,每条记录显示一个更改图标。无法更改某些变量的值,如函数的导入参数等。要查看内部表的内容,请转到调试窗口的表选项卡,然后双击内部表。它将显示内部表的内容。如果知道内部表/变量的名称,可以直接将其写入窗口底部。点击回车键后,数值就会显示出来。

在这里插入图片描述
结构或内部表以字符串形式显示,如上图 GV_BILLING。如果想以字段形式显示,双击上述窗口中的结构名称,结构就会以字段形式显示,如下图所示:

在这里插入图片描述
“断点”按钮用于查看当前设置的所有断点(任何类型)。当在循环中调试或想删除或停用某个断点时,这个按钮非常有用。

在这里插入图片描述

可编程断点

这种技术只能用于定制开发。SAP 标准软件无法使用此技术进行调试。在这种方法中,必须在程序中嵌入一个命令,使执行在该点停止。如果软断点技术不能满足要求,则应使用这些技术。

在程序中写入断点有两种方法。

  1. 断点(BREAK-POINT):使用该命令将使程序执行在该点处停止。

上述技术不应在字段退出中使用,在字段退出中使用该命令将导致短转储。
会导致短转储。如果程序处于开发阶段,且无人使用,则应使用此技术。
无人使用。

  1. BREAK <UNAME>:如果程序处于测试模式,并且还在使用中,则使用此技术。

在这种技术中,断点只对 <UNAME> 用户有效。所有其他用户将继续以正常方式执行程序。需要注意的是,这些断点极有可能嵌入程序中,甚至在使用断点将解决方案和程序传输到生产系统后也是如此。因此,应特别注意删除这些断点。

软断点

软断点(Soft Break Point)是调试的最佳方法,应优先于所有技术。一种方法是转到需要设置断点的代码部分,然后点击 STOP 图标,它将为当前用户登录设置一个断点。断点将对该登录用户的所有会话有效。断点将在下一次执行程序时生效。

在这里插入图片描述
通过双击命令,可以在调试窗口中设置软中断点。这种技术用于加快调试过程。如果知道调试器需要在哪些地方停止,则应在所有这些地方设置断点。这种方法的唯一限制是,断点只能在当前程序中设置。如果有其他包含的程序,则必须等到控制权到达该程序。这些断点适用于该程序的执行。下一次执行时,如果需要停止,则必须重新设置。可以保存以这种方式设置的中断点。保存后的中断点与本节方法 1 相同。

SAP 调试器还提供了几种设置软中断点的方法。可以在以下位置设置直接中断点:

  1. ABAP/4 语句
  2. 例程
  3. 函数模块
  4. 系统异常

在这里插入图片描述
可以使用 ABAP/4 语句设置断点,如 “SELECT”、“MESSAGE”、“CALL FUNCTION”、“PERFORM ”等。如下图所示,选择该选项后会弹出一个小窗口。必须在该窗口中键入一个 ABAP 关键字。在弹出的窗口中按下回车键后,所有使用该语句的程序的所有行都会设置软中断点。

同样,如果要在特定执行/功能模块的特定点设置断点,应选择相关选项。此时会弹出一个输入执行/功能模块名称的窗口。

需要注意的是,用这种方法设置的中断点会在调用堆栈中的所有程序中设置。

在这里插入图片描述

调试示例

作为解释的一部分,我考虑到了销售订单的创建,并展示了使用断点而不是我们常用的观察点进行调试的过程。

T-Code:VA01

在这里插入图片描述
在这里插入图片描述
在上面的屏幕截图中,您可以看到触发的错误,下面的屏幕截图将带您了解利用该错误信息查找问题根源的过程。

在这里插入图片描述
在命令栏中输入“/h ”激活调试,然后点击回车键

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
如果现在使用 f8 执行,就会到达错误信息点,在那里可以找到错误信息。

在这里插入图片描述

到达该点后,您需要双击 kunnrvkorgvtwegspart 字段,检查这些字段的值。

在这里插入图片描述
现在,问题应该很明显了,那就是销售区域和客户的组合缺失。

一些 Tips

下面给出了调试中涉及的一些一般提示、建议和术语。

  • 使用新 Debugger 进行调试 打开一个新会话。因此,在调试之前,请确保我们有足够的空间来容纳相同的内容,否则,旧的调试器会自动打开。
  • 在 Debugging 期间,如果在任何时候,我们想查看源代码,我们可以通过以下方式进行查看。

在这里插入图片描述
在调试过程中,我们遇到了 select 语句,这些语句只不过是语句,它们在运行时从数据库表中获取数据并存储在内部表中。如果我们单击表格图标(在下面的屏幕截图中突出显示),它会在下一个窗口中打开表格。我们可以下载 excel 格式的表格数据进行分析。

在这里插入图片描述
以下是与调试相关的一些重要参数和术语:

  • SY-SUBRC : 这是一个指示器,显示 “Select statement” , “Function Module” , “Subroutine” , “Method” 的执行是否成功。当 sy-subrc 为 0 时,表示执行成功。
  • Variable :这是一个临时存储参数,在程序运行时保存一个值。
  • 常数: 顾名思义,它包含一个常数值,该值在程序中是硬编码的。
  • 表 :当控件通过 select 语句时,成功执行后,表(内部表)将在运行时填充。
  • 结构 :结构不同于表。它只是一个模板,而不是一个表格。

参考文档:

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐