0

我正在尝试学习不必要的复杂源代码。有一个方法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.

4

2 回答 2

3

最简单/最脏的方法是只放入(new Exception("test")).printStackTrace()' SomeObjects 的构造函数并运行代码。每次SomeObject实例化时,您都会将堆栈跟踪打印到控制台。

Eclipse 还支持在构造函数中设置断点,因此您可以设置断点并进行调试。

于 2014-03-21T09:19:42.843 回答
2

确实,使用“显示调用层次结构”会显示太多结果,无法真正让您了解执行流程。

相反,您可以尝试在调试模式下使用 Eclipse,并在passObject(SomeObject someObject). 然后,您将看到当前的堆栈跟踪。通过检查堆栈跟踪上的代码,您可以确定实际发生的调用层次结构。

或者,如果您无法调试,是否可以添加另一行passObject(SomeObject someObject)来打印当前堆栈跟踪?有关详细信息,请参见此处

于 2014-03-21T09:10:29.347 回答