Java 查找对象在哪个类中实例化
我试图学习不必要的复杂源代码。有一个方法Java 查找对象在哪个类中实例化,java,eclipse,instance,instantiation,call-hierarchy,Java,Eclipse,Instance,Instantiation,Call Hierarchy,我试图学习不必要的复杂源代码。有一个方法public void passObject(SomeObject SomeObject),我想知道哪个类SomeObject是在其中实例化的。问题是,当我们向上遍历调用层次结构时,分支因子非常大。例如,三个方法可以通过passObject传递someObject,并且在这三个方法分别传递同一对象之前有三个方法 是否有一些方法可以插入passObject中,例如: public void passObject(SomeObject someObject)
public void passObject(SomeObject SomeObject)
,我想知道哪个类SomeObject
是在其中实例化的。问题是,当我们向上遍历调用层次结构时,分支因子非常大。例如,三个方法可以通过passObject
传递someObject
,并且在这三个方法分别传递同一对象之前有三个方法
是否有一些方法可以插入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
的确,使用“Show-Call-Hierachy”可以显示太多的结果,无法真正让您了解执行流程
相反,您可以尝试在调试模式下使用Eclipse,并在passObject(SomeObject-SomeObject)
的第一行上放置一个断点。然后您将看到当前堆栈跟踪。通过检查堆栈跟踪上的代码,可以确定实际发生的调用层次结构
或者,如果无法调试,是否可以在
passObject(SomeObject SomeObject)
中添加另一行以打印当前堆栈跟踪?有关详细信息,请参阅。使用“显示调用层次结构”确实会显示太多的结果,无法真正让您了解执行流程
相反,您可以尝试在调试模式下使用Eclipse,并在passObject(SomeObject-SomeObject)
的第一行上放置一个断点。然后您将看到当前堆栈跟踪。通过检查堆栈跟踪上的代码,可以确定实际发生的调用层次结构
或者,如果无法调试,是否可以在
passObject(SomeObject SomeObject)
中添加另一行以打印当前堆栈跟踪?有关详细信息,请参阅。最简单/最脏的方法是将(新异常(“测试”)).printStackTrace()放入某个对象的构造函数中并运行代码。每次实例化SomeObject
时,都会在控制台上打印堆栈跟踪
Eclipse还支持构造函数中的断点,因此您可以设置断点并进行调试。最简单/最脏的方法是将(新异常(“测试”).printStackTrace()放入某个对象的构造函数中并运行代码。每次实例化SomeObject
时,都会在控制台上打印堆栈跟踪
Eclipse还支持构造函数中的断点,因此您可以设置断点并进行调试。我不知道断点是否相同,但请检查此线程:我不知道断点是否相同,但请检查此线程:您可以在不创建异常的情况下获得堆栈跟踪。看到我回答中的链接了吗?我没有说这是一个很棒的代码,我说它很简单。这真的很好,解决了我的问题。谁在乎它是否有点脏,它工作得非常出色。你可以在不创建异常的情况下获得堆栈跟踪。看到我回答中的链接了吗?我没有说这是一个很棒的代码,我说它很简单。这真的很好,解决了我的问题。谁在乎它是否有点脏,它工作得很好。