【问题标题】:Get objects involved in Java stacktrace获取 Java stacktrace 中涉及的对象
【发布时间】:2012-12-29 12:57:11
【问题描述】:

我可以使用Thread.currentThread().getStackTrace() 检索当前的堆栈跟踪,但这只会给我调用中涉及的类。是否可以检索调用跟踪中涉及的对象实例?也许某种库可以让我从堆中检索对象?

我有一个问题,需要我追溯到一个 Spring bean,它间接创建了我请求堆栈跟踪的对象。

更新 如果在 Java 中没有内置工具,我正在寻找一个可以在运行时为我执行此操作的可嵌入库。

【问题讨论】:

  • 这似乎是破解 JVM

标签: java stack-trace callstack


【解决方案1】:

这是一个非常有趣的想法,但不幸的是,整个,你不能,这是不可能的。

UPD: 答案为“否”的原因之一是,如果有可能,那么必须存在一些对所有已创建对象的引用列表。但在这种情况下,Java GC 根本不起作用。

【讨论】:

  • 这个论点不成立:Java 有 WeakReference 正是这种用例。
  • 堆不是存储了调用中涉及的所有对象引用吗?我的意思是一旦子函数调用完成,JVM 必须恢复调用者方法。是不是无法访问这部分堆?
【解决方案2】:

你可以试试housemd。它由工程师@alibaba 开发,即使在生产环境中也可以安全使用,例如淘宝网。

它的特点包括:

Display object field value
Output invocation stack trace

以下是示例截图:

【讨论】:

  • 似乎我对我的问题还不够清楚。我正在寻找一个可以在运行时为我做同样事情的可嵌入库。
【解决方案3】:

尝试使用 Eclipse 调试器来查看在特定方法中使用的对象的值。在要暂停程序的行上放置断点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-20
    • 2013-09-19
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    相关资源
    最近更新 更多