美文网首页SAPabap 开发技术文档
[ABAP] 六种调试技巧,帮你找到源代码

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

作者: 三月行者 | 来源:发表于2019-05-31 15:21 被阅读0次

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


    目录

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


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

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

    程序 ZSDFSF 不存在

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

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

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

    消息号 DS017

    来到SE91,查找使用列表。

    Where-Used List

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

    LWBABAPF00

    通过调试可以确认。

    确认

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

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

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

    /h

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

    条件断点1 条件断点2

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

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

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

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

    消息断点 创建消息断点

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

    方法4 - 扫描源代码

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

    事务代码:SE38

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

    SOURCE SCAN

    仅有4处结果。

    Result

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

    ABAP 搜索 Result

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

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

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

    Aggregation

    然后从 SAT 中执行 SE38 。

    Execute

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

    progress information

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

    Find Statement = MESSAGE

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

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

    Set size

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

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

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

    回到 SE38,单击显示按钮。

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

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


    Display ABAP call location

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

    code

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

    806

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

    相关文章

      网友评论

        本文标题:[ABAP] 六种调试技巧,帮你找到源代码

        本文链接:https://www.haomeiwen.com/subject/xfrmtctx.html