我可以使用检索当前的堆栈跟踪,Thread.currentThread().getStackTrace()
但这只给了我调用中涉及的类。是否可以检索调用跟踪中涉及的对象实例?也许某种库可以让我从堆中检索对象?
我有一个问题,需要我追溯到一个 Spring bean,它间接创建了我请求堆栈跟踪的对象。
更新 如果在 Java 中没有内置工具,我正在寻找一个可以在运行时为我执行此操作的可嵌入库。
我可以使用检索当前的堆栈跟踪,Thread.currentThread().getStackTrace()
但这只给了我调用中涉及的类。是否可以检索调用跟踪中涉及的对象实例?也许某种库可以让我从堆中检索对象?
我有一个问题,需要我追溯到一个 Spring bean,它间接创建了我请求堆栈跟踪的对象。
更新 如果在 Java 中没有内置工具,我正在寻找一个可以在运行时为我执行此操作的可嵌入库。
这是一个非常有趣的想法,但不幸的是,你不能,这是不可能的。
UPD:答案为“否”的原因之一是这样一个事实,即如果可能,那么必须存在对所有已创建对象的引用列表。但在这种情况下,Java GC 根本不起作用。
你可以试试housemd。它由工程师@alibaba 开发,即使在生产环境中也可以安全使用,例如 taobao.com。
其特点包括:
Display object field value Output invocation stack trace
以下是示例屏幕截图:
尝试使用 Eclipse 调试器来查看在特定方法中使用的对象的值。在要暂停程序的行上放置断点。