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

声明:本文来自Jerry Wang在SAP社区的一篇分享,本人在学习过程中顺便做了翻译。
Jerry 是我很喜欢的一位作者,经常能够从他的文章中学到东西,我在这里表示感谢。


目录

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


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

我将用一个简单的例子来演示。在SE38中输入一个无效的名称,然后单击显示按钮,会在底部出现一条消息。我将向你展示如何找到引发此消息的确切代码行。

[ABAP] 六种调试技巧,帮你找到源代码_第1张图片
程序 ZSDFSF 不存在

注意:这里列出的一些方法对于这种情况可能效率不高,我只是为了完整性列出了我的所有技巧。我相信每个技巧在某些情况下都有用。

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

单击消息,我们能发现消息号为DS017。

[ABAP] 六种调试技巧,帮你找到源代码_第2张图片
消息号 DS017

来到SE91,查找使用列表。

[ABAP] 六种调试技巧,帮你找到源代码_第3张图片
Where-Used List

然后逐个双击查看,因为我的情况是以错误类型方式显示一个消息。

[ABAP] 六种调试技巧,帮你找到源代码_第4张图片
LWBABAPF00

通过调试可以确认。

[ABAP] 六种调试技巧,帮你找到源代码_第5张图片
确认

小结:本方法需要手动查看代码,在引用位置较多的情况下,需要花费较多的时间。

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

在命令窗口输入/h,然后单击显示,以触发调试模式。

[ABAP] 六种调试技巧,帮你找到源代码_第6张图片
/h

设置条件断点,然后按F8执行,也会到达引发消息的代码。这种方法大概只需要20秒。

[ABAP] 六种调试技巧,帮你找到源代码_第7张图片
条件断点1
[ABAP] 六种调试技巧,帮你找到源代码_第8张图片
条件断点2

如何在弹出窗口开启调试模式

如果涉及弹出窗口,则命令行不可用,在这种情况下,请参阅SAP Note 118184,了解如何切换到调试模式或参考此wiki。

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

使用上面的方式激活调试模式,在如下路径找到消息断点,填入第一步中获得的消息参数。

[ABAP] 六种调试技巧,帮你找到源代码_第9张图片
消息断点
[ABAP] 六种调试技巧,帮你找到源代码_第10张图片
创建消息断点

小结:如果要调试的场景非常复杂,例如涉及多个组件的深度调用堆栈,则调试器可能会经常停留在带有MESSAGE关键字的ABAP代码中。您仍然必须手动检查代码是否是你在找的。尽管如此,它仍然比您逐个手动调试更有效。

方法4 - 扫描源代码

在SE93,输入SE38单击显示,查看详细信息,这里看到它属于包SEDT。

[ABAP] 六种调试技巧,帮你找到源代码_第11张图片
事务代码:SE38

然后使用报表 RS_ABAP_SOURCE_SCAN 输入下面的搜索条件。不使用程序 RSABAPPROGRAM 的原因是,它只是一个包装器,SE38的实际实施并不在其中。

[ABAP] 六种调试技巧,帮你找到源代码_第12张图片
SOURCE SCAN

仅有4处结果。

[ABAP] 六种调试技巧,帮你找到源代码_第13张图片
Result

你也可以使用 TCODE: CODE_SCANNER,实现相同的结果:

[ABAP] 六种调试技巧,帮你找到源代码_第14张图片
ABAP 搜索
[ABAP] 六种调试技巧,帮你找到源代码_第15张图片
Result

我个人喜欢这个方法,这帮过我很多次。更重要的是,它不仅可以用作调试技巧,还能用来研究其他人的代码。假设你对某个功能实现特别好奇,你可以想一个有可能的关键词并使用这一功能搜索。

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

使用事务码:SAT,创建一个新变式,确保选中单选项“Aggregation - None”,保存。

[ABAP] 六种调试技巧,帮你找到源代码_第16张图片
Aggregation

然后从 SAT 中执行 SE38 。

[ABAP] 六种调试技巧,帮你找到源代码_第17张图片
Execute

像往常一样执行你的步骤,输入一个不存在的程序并单击显示按钮,看到消息后,退出SE38。SAT 将自动展示运行时的跟踪信息,这可能需要一点时间,你可以看屏幕下方的进度条。

progress information

单击“Call Hierarchy”选项卡,通过查找按钮,在 Statement 条件中输入 MESSAGE回车,你将在最后面看到两条结果。

[ABAP] 六种调试技巧,帮你找到源代码_第18张图片
Find
[ABAP] 六种调试技巧,帮你找到源代码_第19张图片
Statement = MESSAGE
[ABAP] 六种调试技巧,帮你找到源代码_第20张图片

双击选中的行就能看到源代码。

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

[ABAP] 六种调试技巧,帮你找到源代码_第21张图片
Set size

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

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

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

回到 SE38,单击显示按钮。

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

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


[ABAP] 六种调试技巧,帮你找到源代码_第22张图片
Display ABAP call location

我们看到的逻辑是首先尝试搜索非活动版本搜索数据库,如果失败,请尝试搜索活动版本。

[ABAP] 六种调试技巧,帮你找到源代码_第23张图片
code

我们希望试图找到的代码就在第770行和第775行的SQL语句的附近。这次很幸运,它在第806行。

[ABAP] 六种调试技巧,帮你找到源代码_第24张图片
806

参考文献:
[1]. Six kinds of debugging tips to find the source code where the message is raised

你可能感兴趣的:([ABAP] 六种调试技巧,帮你找到源代码)