从类文件中读取一行代码



给定StackTraceElement.getLineNumber(),是否有方法从编译的类文件中读取这一行的内容?即使可以匹配行,类文件的内容会被编译器"混淆"吗?

例如:

public void myMethod () {
    MyObj m = new MyObj ();   // can I reconstruct this line as String?
}

代码不包含在编译的类文件中,该类文件包含字节码;所以,不,只从类文件中工作,您不能重构那行代码。当然,反编译Java字节码是可能的,一个构建得足够好的反编译器可能会或多或少地重构那行代码,但您必须有一个像样的反编译器。最终结果可能看起来很像原始源代码,也可能不像原始源代码,这取决于优化等。

您可以将源文件包含到war/jar文件中,您可以将其作为文件读取。字节码只包含行号而不包含实际代码

您可以从类文件(Foo.class)中检索字节码指令,但不能检索表示源代码的String。然而,给定一个源文件和行号,您可以使用标准的文件读取技术从源文件(Foo.java)中读取该行。

要了解.class文件中包含的信息类型,请查看javap工具。我想从技术上讲,您可以对编译为该类的源代码做出最好的猜测,或者在其上运行反编译器,但行号不会完全匹配,格式将完全不同,也许至关重要的是,使用源代码保留级别将没有注释或注释。

相关内容

  • 没有找到相关文章

最新更新