【问题标题】:Java Access to Local Variable NamesJava 访问局部变量名
【发布时间】:2011-03-14 19:32:15
【问题描述】:

我目前正在编写一个程序,我想在程序执行期间访问局部变量的变量名并将它们传递给外部。我知道 Java 会在编译期间转储局部变量名称,除非在调试模式下编译。

环顾一番后,似乎 JDI/JPDA 是此类工作的最佳选择。假设ref 指的是ThreadReference,以下是我目前所拥有的:

ref.suspend();
StackFrame currentFrame = ref.frame(0);
List<LocalVariable> vars = currentFrame.visibleVariables();
ref.resume();

两个问题:

  1. 我是在正确的轨道上,还是有更好的方法来做到这一点?
  2. 如何获取ThreadReference 以设置为refLocatableEvent 似乎是我需要的,但谁能提供一个如何使用它的例子?

非常感谢!

【问题讨论】:

  • 为什么,哦,为什么?有什么可能的原因去查询一个正在运行的方法的局部变量names
  • 调试工具 - 我想将变量传递给 Lisp 的 REPL 以便进一步评估/操作。那里更容易,但如果用户传入许多变量,他们将需要指定所有这些变量的名称,或者处理 REPL 中具有不同的变量名称。
  • @souparnomajumder 实际上,我认为那篇文章是这篇文章的副本,因为这篇文章要早得多。答案应该张贴在这里,并且作为副本关闭。
  • @cryptic_star,是的,这篇文章应该是重复的,但接受的答案已经失去了链接。因此合并请求

标签: java debugging jdi jpda


【解决方案1】:

没有多少人有这方面的经验。

在别处寻找答案。我有代码链接,但它们不再存在。无法删除此答案,因为它已被接受。

【讨论】:

  • 看起来这是我能得到的最好的了... :) 感谢您提供的信息,但我发现 JDPA 文档非常混乱。
  • 链接好像坏了,能修一下吗? @罗曼
【解决方案2】:

是的,你在正确的轨道上!

对于任何想要尝试开始使用 JDI 的人来说,“Trace”示例非常宝贵:

http://www.docjar.com/docs/api/com/sun/tools/example/trace/package-index.html

这是一个可用的主干。它向您展示了如何使用事件,这确实会给您一个 ThreadReference。它还向您展示了如何以编程方式启动第二个 JVM。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多