如何检查谁在哪里调用此方法



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

我使用了"Where used"工具来显示从哪里调用类,但事实证明,它是从其他地方调用的。

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

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

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

你找不到这种对CCD_ 1的引用;"Where Used";列表,因为在该代码位置foo也可以是对实现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).

使用使用的工具无法找到。但是,如果类和/或方法名称确实出现在代码中(可能没有,例如,如果它们是从自定义表中读取的(,则可以使用报告RS_ABAP_SOURCE_SCAN。这个方便的小工具允许您选择一组ABAP程序,并在其源代码中搜索字符串(甚至正则表达式(。


但是,如果您知道当您作为用户执行特定的操作时,该方法会被调用,并且只想知道在哪里,那么在方法中设置调试器断点、运行并检查调用堆栈会更容易。

使用code_scanner事务进行排序。

最新更新