Java对象上的getPOB

Java对象上的getPOB,java,debugging,Java,Debugging,这是一个关于调试技术的问题 有时,我会引用一个对象,我非常想知道它是在哪里创建的 有人知道为什么java不在java.lang.Object上添加一个方便的方法,称为getPlaceOfBirth(),它返回一个stacktrace,显示对象的创建位置 我想这看起来并不难实现 另外,在等待Java创建者添加此方法时,如果他们愿意的话,我应该怎么做呢? (您通常如何确定在何处/何时创建感兴趣的对象?使您的所有对象都扩展一个抽象类。可能添加一个属性检查以在不调试时跳过此逻辑(即-Dmy.class.

这是一个关于调试技术的问题

有时,我会引用一个对象,我非常想知道它是在哪里创建的

有人知道为什么java不在
java.lang.Object
上添加一个方便的方法,称为
getPlaceOfBirth()
,它返回一个stacktrace,显示对象的创建位置

我想这看起来并不难实现

另外,在等待Java创建者添加此方法时,如果他们愿意的话,我应该怎么做呢?
(您通常如何确定在何处/何时创建感兴趣的对象?

使您的所有对象都扩展一个抽象类。可能添加一个属性检查以在不调试时跳过此逻辑(即
-Dmy.class.MyObjectDebugging=true


您可能要等很长时间才能将其添加到Java中。答案在问题中。在构造函数中创建堆栈跟踪,并将其保留为对象中的字段。docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#getStackTrace()是的,我不想在调试时改变代码库!
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();
         }
     }
}