簡體   English   中英

查找實例化對象的類

[英]Find which class an object was instantiated in

我正在嘗試學習不必要的復雜源代碼。 有一個方法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

最簡單/最骯臟的方法是將(new Exception("test")).printStackTrace()放入SomeObject的構造函數中並運行代碼。 每次實例化SomeObject您都會將堆棧跟蹤打印到控制台。

Eclipse還支持構造函數中的斷點,因此您可以設置斷點並進行調試。

的確,使用“顯示呼叫層次”可能會顯示太多結果,從而無法真正讓您了解執行流程。

相反,您可以嘗試在調試模式下使用Eclipse,並在passObject(SomeObject someObject)的第一行上放置一個斷點。 然后,您將看到當前的堆棧跟蹤。 通過檢查堆棧跟蹤中的代碼,您可以確定實際發生的調用層次結構。

或者,如果無法調試,是否可以在passObject(SomeObject someObject)添加另一行以打印當前堆棧跟蹤? 有關詳細信息,請參見此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM