SAP ABAP 的几种调试方法

举报
雨绸缪 发表于 2023/07/31 17:13:34 2023/07/31
【摘要】 介绍对于程序员来时,BUG 是不可避免的,因此 DEBUG 就很重要了。调试(Debug)是查找 SAP 一些事务发生错误原因的方法(例如,查找字段中某个值更新的原因,或者确定用户在事务处理过程中收到错误、警告或异常终止消息的原因)。如果无法通过功能方法(如检查定制或主数据)确定根本原因,则必须进行调试。本文将介绍 ABAP 的调试概念以及用于调试的各种工具和技术。 如何触发调试模式如果不...

介绍

对于程序员来时,BUG 是不可避免的,因此 DEBUG 就很重要了。调试(Debug)是查找 SAP 一些事务发生错误原因的方法(例如,查找字段中某个值更新的原因,或者确定用户在事务处理过程中收到错误、警告或异常终止消息的原因)。如果无法通过功能方法(如检查定制或主数据)确定根本原因,则必须进行调试。

本文将介绍 ABAP 的调试概念以及用于调试的各种工具和技术。

如何触发调试模式

如果不知道前台操作在哪能开启调试模式,可以在执行任何事务时在命令提示符中输入事务 /h,有时称为 OK CODE,接着按下 Enter 键激活调试器。

控制按钮

Debugger control buttons

  1. 单步(F5 键)。单击此图标时,调试器控件将移动到调试中的下一行代码。如果下一行是对另一个程序(例如,功能模块)的调用,则控制转移到该程序。
  2. 执行(F6 键)。单击此图标时,调试器控件仅移动到同一程序中的下一行代码,而不进入在单击此图标的代码行中调用的函数模块或程序的代码。
  3. 返回(F7 键)。单击此图标时,调试器控件将返回到调用程序。当您处于循环中或从主程序调用的功能模块或程序中,并且想要返回到主程序时,此图标很有用。
  4. 运行/继续(F8 键)。单击此图标时,调试器控件将移动到下一个断点集(如果有)。否则,将关闭调试,并完全执行程序。

字段显示

在调试期间,字段显示显示字段列表。如果单击程序中的任何字段,调试器将显示该字段的当前值或内容。如果出于某种原因(例如在测试期间),您想为字段使用不同的值,则可以使用更改图标 Debugger Pencil 更改字段值,但调试中的此访问权限通常仅授予开发人员,在生产系统中永远不会授予。(见下文)


Debugger Fields

.

表格显示

现在我们需要转向如何查看表格。为什么?假设您正在查看销售订单或购买要求…等等 这些项目通常存储在所谓的内部表中。这不要与像VBAK或VBAP这样的数据库表混淆。数据库表存储在后端DBMS(Oracle,DB2,甚至HANA)上,并且是持久的。虽然内部表不是持久的,并且具有内存中当前LUW的保质期。

要查看内部表格的当前内容或行,请双击该图标。我知道你需要知道如何添加、改变或删除行,所以这时你就会使用对象服务图标。 根据你正在看的东西(字段、数据库表、内部表…等),如果你点击这个图标,那么与你正在处理的对象类型有关的服务将可供你使用。例如,你可以添加、改变或删除一行。你还可以通过使用图标将内部表导出到 EXCEL。

Debugger Table 2

断点

在调试器中,或者在编辑器(SE80/SE38/SE37/SE24)中,都可以为某一行代码设置断点。断点的图标看起来像这样。相反,这个图标显示了你在一个对象的执行过程中的位置。比如说,你用/h来触发调试器,每次单步走一行。那么这个图标就会随着执行而继续向下移动。

当你双击行号左边的一行代码时,你将设置一个 BREAK-POINT 。然后当你运行事务或程序时,调试器将在那行特定的代码处停止,并弹出一个你现在已经很熟悉的调试器屏幕。(见下图)

Debug Screen 3

设置断点的方法不止一种。我个人最喜欢的一种方式是使用菜单路径 BREAKPOINTS->BREAKPOINT AT。这里我们有很多选项,可以根据命令、函数、方法…等设置动态断点。一种使用方法是选择``BREAKPOINT AT语句,并输入AUTHORITY_CHECK` 命令。

Debug Screen 4

这将使对象在即将执行此命令的任何时候停止。然后当你停止时,用 F6 来执行。然后使用字段更改功能,将 SY-SUBRC 的内容改为零,如果它不是零的话。这是一个很好的方法来绕过和使用你可能没有授权的 SAP 事务。请记住,这样做的时候一定要小心,而且在生产中不能这样做。

调用堆栈

调试器用户界面中的 DESKTOP 2 标签显示 ABAP 调用栈。它允许你切换到每个堆栈级别的上下文,并通过打开 ABAP 编辑器导航到源代码,以便在一个单独的窗口中开始对代码进行深入分析(只需双击!)。SAP NetWeaver 2004s 的新功能还包括显示屏幕(Dynpro)堆栈的能力。更重要的是,你可以显示ABAP和屏幕堆栈的组合,以找出在哪个 ABAP 层调用了哪个屏幕,哪个屏幕调用了哪个 ABAP 模块。

你可以通过双击堆栈类型栏中的图标,在编辑器中从每个堆栈行导航到相应的源行

debugger ABAP stack

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。