我正在尝试学习不必要的复杂源代码。有一个方法public void passObject(SomeObject someObject)
,我想知道实例化了哪个类someObject
。问题是,当我们遍历调用层次结构时,分支因子非常大。例如,三个方法可以通过someObject
到passObject
,在这三个方法之前的三个方法可以分别传递相同的对象。
是否有一些方法可以插入passObject
,例如:
public void passObject(SomeObject someObject) {
whereDidThisComeFrom(someObject); // Should print the class (perhaps) where someObject was instantiated.
//
//do the other stuff that passObject is supposed to do.
}
我使用Eclipse
。
答案 0 :(得分:3)
最简单/最脏的方法是将(new Exception("test")).printStackTrace()
放入SomeObject
的构造函数中并运行代码。每次SomeObject
实例化时,您都会在控制台上打印堆栈跟踪。
Eclipse还支持构造函数中的断点,因此您可以设置断点并进行调试。
答案 1 :(得分:2)
使用'Show Call Hierachy'确实可以显示太多结果,让您真正了解执行流程。
相反,您可以尝试在调试模式下使用Eclipse,并在passObject(SomeObject someObject)
的第一行放置一个断点。然后,您将看到当前的堆栈跟踪。通过检查堆栈跟踪上的代码,您可以确定实际发生的调用层次结构。
或者,如果您无法调试,是否可以向passObject(SomeObject someObject)
添加另一行以打印当前堆栈跟踪?有关详细信息,请参阅here。