检测 Java 应用程序的执行(不仅仅是字节码)
我正在做一些 Java 应用程序检测。但使用 ASM 或 BCEL 的可用检测工具仅允许检测字节码。你们知道有一些工具可以检测应用程序的执行吗(比如不仅存在于字节码中,而且 JVM 也能做到这一点)。
例如,如果应用程序有一个类 A,
class A
{
int a;
public A()
{}
}
当我执行 A obj = new A()
时,字节码将不包含任何对 obj.a
的写入,但是JVM 会这么做,AFIK。
还有其他一些无法用字节码捕获的东西。那么,你们能告诉我是否存在这样一个框架,可以捕获 JVM 执行的操作。
I am doing some Java application instrumentation. But the available instrumentation tools that use ASM or BCEL only allow to instrument the bytecode. Do you guys know of some tool that can instrument the execution of the application (as in the stuff that is not just there in bytecode but the JVM did it).
For example, if the application has a class A
class A
{
int a;
public A()
{}
}
When I do A obj = new A()
, then the byte code will not contain any write to obj.a
, but the JVM will do that, AFIK.
There is other stuff as well that can not be captured in bytecode. So, can you guys tell me if there exists such a framework that can capture the operations executed by the JVM.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您想要完全控制仪器,理想情况下您需要完全访问源代码并能够对其进行修改。否则,您将受到字节码保留内容的支配。
我们的 DMS 软件重组工具包是一个程序转换系统,提供对源代码的访问。使用其 Java 前端,DMS 可以解析 (Java) 代码、构建 AST、对 AST 应用任意转换并重新生成已检测的 Java 代码。
您选择使用什么工具取决于您。这篇关于检测代码的论文描述了如何构建经典的测试覆盖率,但其想法是一般的。
If you want complete control over the instrumentation, you ideally need complete access to the source and the ability to modify it. Otherwise you are at the mercy of what the bytecode retains.
Our DMS Software Reengineering Toolkit is a program transformation system that provides such access to the source. Using its Java Front End, DMS can parse (Java) code, build ASTs, apply arbitrary transforms to the ASTs and regenerated instrumented Java code.
What you choose to instrument is up to you. This paper on instrumenting code describes how to build classic test coverage, but the ideas are general.