我正在用Java api编写脚本,该脚本编译为类文件,并在虚拟机上从我的角度执行(我无法访问此虚拟机,也无法从内部调试我的类文件)。这些脚本需要可观察数据才能执行,除非在虚拟机内执行,否则无法正常运行。由于这些类文件的执行方式,据我所知,我无法用IDE的内置调试器调试它们。
我没有足够的编码词汇来搜索最后一句话的答案,所以如果我错了,请纠正我。
无论如何,我所确定的允许我调试这些脚本的唯一方法是经典的print-statement方法。这是可怕的。但它是有效的。似乎整个api社区都在使用这种方法。
我有一个想法,我可以使用反射从我的类中获取信息,因为它们正在执行,但这仍然不能让我访问我正在寻找的逐行调试。
我想做的是一步一步地监控我的脚本的执行(VM所做的每一次计算)并存储有关这些计算的信息(类"bar"中的变量"foo"在在线"soandso"中变为4)作为一种运行缓存,每当发生错误时,它就会转储到系统控制台。
这可能吗?
您可以看看动态代理
这里有一个很好的解释。
使用动态代理,您可以输出(日志,作为邮件发送,…)正在调用的方法和传递给该方法的参数。
这不是你想要的,但也许它会对你有帮助。