-2
這是一個關於調試技術的問題。Java對象上的getPOB
有時,我會一個對象的引用,我非常想知道在創建它
有誰知道爲什麼的Java不會對java.lang.Object
添加方便的方法像getPlaceOfBirth()
叫一些東西,返回一個顯示對象創建位置的堆棧跟蹤?
我想這並不難實現。
另外,在等待Java創建者添加此方法的時候,我應該如何處理呢? (您通常會如何確定創建感興趣對象的位置/時間?)
這是一個關於調試技術的問題。Java對象上的getPOB
有時,我會一個對象的引用,我非常想知道在創建它
有誰知道爲什麼的Java不會對java.lang.Object
添加方便的方法像getPlaceOfBirth()
叫一些東西,返回一個顯示對象創建位置的堆棧跟蹤?
我想這並不難實現。
另外,在等待Java創建者添加此方法的時候,我應該如何處理呢? (您通常會如何確定創建感興趣對象的位置/時間?)
使所有對象都擴展爲抽象類。也許增加一個屬性檢查跳過這個邏輯,當不調試(即-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();
}
}
}
你可能會等待looooong時間纔會被添加到Java。答案在於這個問題。在構造函數中創建一個堆棧跟蹤,並將其保留爲對象中的一個字段。 docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#getStackTrace() –
嗯,是的,我不想在調試的時候改變代碼庫! –