【问题标题】:What is java currently doing?java目前在做什么?
【发布时间】:2016-09-17 16:08:16
【问题描述】:

我正在使用 Java api 编写脚本,该脚本编译为类文件并在我对虚拟机的看法之外执行(我无法访问此虚拟机,也无法从内部调试我的类文件。 ) 这些脚本需要可观察的数据才能执行,除非它们已在此虚拟机中执行,否则它们无法正常运行。由于这些类文件的执行方式,据我所知,我无法使用 IDE 的内置调试器来调试它们。

我真的没有编码词汇来搜索最后一句话的答案,所以如果我错了,请纠正我。

无论如何,我已经确定可以调试这些脚本的唯一方法是经典的 print-statement 方法。这太糟糕了。但它有效。而且似乎整个api社区都在使用这种方法。

我的想法是,当我的类正在执行时,我可以使用反射从它们中获取信息,但这仍然无法让我访问我正在寻找的逐行调试。

我想做的是逐步监视我的脚本的执行(VM 执行的每个计算)并存储有关这些计算的信息(“bar”类中的变量“foo”在线变为 4“ soandso") 作为一种运行缓存,只要发生错误就会转储到系统控制台。

这可能吗?

【问题讨论】:

  • 您应该考虑使用记录器。它就像打印语句,除了您可以指定日志级别(调试、信息、警告、错误)并且您可以选择写入文件以及标准输出(如打印语句)。如果您可以访问虚拟机,也可以下载日志。
  • 您使用的是哪个 IDE,哪个不允许调试?
  • 不确定我是否完全遵循这个问题,Java 远程调试是您需要做的吗?这至少在 Eclipse 中是可行的。
  • 一个记录器肯定会更上一层楼,但这仍然会导致'插入打印语句->运行->如果程序进入我的打印语句,则删除该打印语句,重复我试图避免的调试。
  • 我将在使用 Eclipse 时研究 Java 远程调试。谢谢!

标签: java debugging reflection


【解决方案1】:

你可以看看dynamic proxies

Here 是一个很好的解释。

使用动态代理,您可以输出(记录、作为邮件发送,...)被调用的方法以及传递给该方法的参数。

这不是您正在寻找的东西,但也许会对您有所帮助。

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 2012-08-07
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2016-05-09
    • 2011-04-11
    • 2020-11-10
    • 2014-01-13
    相关资源
    最近更新 更多