[ABAP] 六种调试技巧,帮你找到源代码

目录
方法1 - 在ABAP工作台中使用“使用位置列表”功能
方法2 - 在ABAP调试其中使用监控点观察sy-msgid
如何在弹出窗口开启调试模式
方法3 - 利用消息断点类型更有效地进行调试
方法4 - 扫描源代码
方法5 - 使用SAT(ABAP运行时间分析工具)
方法6 - 你是否这样使用过ST05

我喜欢分享我在日常生活中的调试技巧,这写技巧是我生活更加轻松。如果你发现你的技巧未在文中列出,请在评论中说明,以便对更多人产生帮助。

我将用一个简单的例子来演示。在SE38中输入一个无效的名称,然后单击显示按钮,会在底部出现一条消息。我将向你展示如何找到引发此消息的确切代码行。
在这里插入图片描述
注意:这里列出的一些方法对于这种情况可能效率不高,我只是为了完整性列出了我的所有技巧。我相信每个技巧在某些情况下都有用。

方法1 - 在ABAP工作台中使用“使用位置列表”功能

单击消息,我们能发现消息号为DS017。
在这里插入图片描述
来到SE91,查找使用列表。
在这里插入图片描述
然后逐个双击查看,因为我的情况是以错误类型方式显示一个消息。
在这里插入图片描述
通过调试可以确认。
在这里插入图片描述
小结:本方法需要手动查看代码,在引用位置较多的情况下,需要花费较多的时间。

方法2 - 在ABAP调试其中使用监控点观察sy-msgid

在命令窗口输入/h,然后单击显示,以触发调试模式。
在这里插入图片描述
设置条件断点,然后按F8执行,也会到达引发消息的代码。这种方法大概只需要20秒。
在这里插入图片描述
在这里插入图片描述
如何在弹出窗口开启调试模式
如果涉及弹出窗口,则命令行不可用,在这种情况下,请参阅SAP Note 118184,了解如何切换到调试模式或参考此wiki。

方法3 - 利用消息断点类型更有效地进行调试

使用上面的方式激活调试模式,在如下路径找到消息断点,填入第一步中获得的消息参数。
在这里插入图片描述
在这里插入图片描述
小结:如果要调试的场景非常复杂,例如涉及多个组件的深度调用堆栈,则调试器可能会经常停留在带有MESSAGE关键字的ABAP代码中。您仍然必须手动检查代码是否是你在找的。尽管如此,它仍然比您逐个手动调试更有效。

方法4 - 扫描源代码

在SE93,输入SE38单击显示,查看详细信息,这里看到它属于包SEDT。
在这里插入图片描述
然后使用报表 RS_ABAP_SOURCE_SCAN 输入下面的搜索条件。不使用程序 RSABAPPROGRAM 的原因是,它只是一个包装器,SE38的实际实施并不在其中。
在这里插入图片描述
仅有4处结果。
在这里插入图片描述
你也可以使用 TCODE: CODE_SCANNER,实现相同的结果:
在这里插入图片描述
在这里插入图片描述
我个人喜欢这个方法,这帮过我很多次。更重要的是,它不仅可以用作调试技巧,还能用来研究其他人的代码。假设你对某个功能实现特别好奇,你可以想一个有可能的关键词并使用这一功能搜索。

方法5 - 使用SAT(ABAP运行时间分析工具)

使用事务码:SAT,创建一个新变式,确保选中单选项“Aggregation - None”,保存。
在这里插入图片描述
然后从 SAT 中执行 SE38 。
在这里插入图片描述
像往常一样执行你的步骤,输入一个不存在的程序并单击显示按钮,看到消息后,退出SE38。SAT 将自动展示运行时的跟踪信息,这可能需要一点时间,你可以看屏幕下方的进度条。
在这里插入图片描述

单击“Call Hierarchy”选项卡,通过查找按钮,在 Statement 条件中输入 MESSAGE回车,你将在最后面看到两条结果。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
双击选中的行就能看到源代码。

小结:如果您使用SAT跟踪的场景很复杂,您将获得一个巨大的跟踪文件。虽然您可以在跟踪文件中指定一个非常大的大小,但根据我的实际经验,当结果跟踪文件超过1 G时,您将无法打开结果跟踪文件,至少在我的应用程序服务器中是这样。

在这里插入图片描述

方法6 - 你是否这样使用过ST05

首先打开 SE38,输入不存在的名称。

再打开一个 ST05 新窗口,使用默认设置。

回到 SE38,单击显示按钮。

回到 ST05,停用并显示跟踪结果:

我们知道 PROGDIR 表存储报告的头信息。它让 ABAP 编辑器通过在该表中搜索来检查程序名是否有效。因此,如果数据库搜索失败,毫无疑问的下一步就是提出消息。单击“Display ABAP call location”按钮转到源代码:

在这里插入图片描述
我们看到的逻辑是首先尝试搜索非活动版本搜索数据库,如果失败,请尝试搜索活动版本。
在这里插入图片描述
我们希望试图找到的代码就在第770行和第775行的SQL语句的附近。这次很幸运,它在第806行。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值