ABAP-如何检查从哪里调用方法

问题描述

我在ABAP类中有一个自定义方法

我使用“在哪里使用”工具显示了从何处调用该类,但事实证明,它是在我没想到的其他地方调用的。

那么,显示调用方法的所有内容的完整列表的最佳方法是什么?

解决方法

由于面向对象编程的奇迹,类的实例可以隐藏在对其实现的基类或接口之一的引用的后面。例如:

DATA foo TYPE REF TO z_my_interface.    
CREATE OBJECT foo TYPE z_my_class.  
" lots of more code
foo->bar( ).

您无法在其“使用的地方”列表中找到对z_my_class->foo的引用,因为在该代码位置foo也可能是对实现{{1 }}。但是,如果您不只是查看方法的使用列表,而是查看整个类或声明该方法的接口/基类的使用列表,那么您也许可以找到此方法。


然后有像这样的邪恶的动态编程技巧,它们会在运行时确定方法和类:

z_my_interface

没有机会通过使用工具找到。但是,如果类和/或方法名确实出现在代码中(例如,如果从定制表中读取它们,则可能不会出现),则可以使用报告DATA foo TYPE REF TO object. CONSTANTS: classname TYPE string VALUE 'Z_MY_CLASS',methodname TYPE string VALUE 'BAR'. CREATE OBJECT foo TYPE (classname). CALL METHOD foo->(methodname). 。这个方便的小工具可让您选择一组ABAP程序,并在其源代码中搜索字符串(甚至正则表达式)。


但是,如果您知道,当您以用户的身份执行特定操作并且只想知道在哪里时,该方法就被调用,那么只需在该方法中设置调试器断点即可运行并检查调用堆栈。

,

使用code_scanner事务排序。