2014-02-18 21 views
-2

這是一個關於調試技術的問題。Java對象上的getPOB

有時,我會一個對象的引用,我非常想知道在創建它

有誰知道爲什麼的Java不會對java.lang.Object添加方便的方法像getPlaceOfBirth()叫一些東西,返回一個顯示對象創建位置的堆棧跟蹤?

我想這並不難實現。

另外,在等待Java創建者添加此方法的時候,我應該如何處理呢? (您通常會如何確定創建感興趣對象的位置/時間?)

+0

你可能會等待looooong時間纔會被添加到Java。答案在於這個問題。在構造函數中創建一個堆棧跟蹤,並將其保留爲對象中的一個字段。 docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#getStackTrace() –

+0

嗯,是的,我不想在調試的時候改變代碼庫! –

回答

2

使所有對象都擴展爲抽象類。也許增加一個屬性檢查跳過這個邏輯,當不調試(即-Dmy.class.MyObjectDebugging=true

public abstract class MyObject 
{ 
    StackTraceElements[] pob = null; 
    long pobThreadID; 

    public MyObject() 
    { 
     if(System.getProperty("my.class.MyObjectDebugging") != null) 
     { 
      pob = Thread.currentThread().getStackTrace(); 
      pobThreadID = Thread.currentThread().getId(); 
     } 
    } 
}