【发布时间】: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