我可以通过反射获得的调试器信息获得什么?

时间:2013-06-28 14:55:40

标签: java debugging reflection

最近有人告诉我,如果你查看Java程序的调试信息,你可以获得更多关于它的信息,而不是反射。我意识到虽然我真的不知道什么,可能除了内存位置等等。那么你还可以通过反射得到的调试信息还能得到什么(注意:我不是在谈论使用断点来获取实际的运行时值)?您是否可以通过反射得到的任何信息都无法从调试器获得?

1 个答案:

答案 0 :(得分:1)

我将假设“使用调试器信息”实际上意味着“使用agent API”,这是调试器(以及其他人)使用的内容。

答案非常多。

首先,JVMTI可以force garbage collection,没有纯Java API可以。 对于特定类型的应用程序而言,这可能与常识相悖,甚至对“生产”代码也很有用。

您还可以在加载时对类进行检测。这对于各种分析器工具,编译代码的混淆(加密的类文件)甚至动态更改加载的类以响应源代码的更改非常有用(请参阅jrebel以获得一个很好的示例)