javac可以提供类“源调试扩展信息”属性吗?

时间:2014-08-26 23:44:01

标签: java annotations jvmti

Java类文件格式支持名为" source debug extension" (见Java language specification §4.7.11 "TheSourceDebugExtension attribute")。

在支持JVMTI这方面的JVM中,您可以使用jvmtiError GetSourceDebugExtension(jvmtiEnv *, jclass, char **)查询此字符串。

我的问题是,是否有一种方法可以使用普通的javac和Java语言来嵌入"源代码调试扩展" .class文件中的信息。核心Java语言中的注释似乎没有这样做(在javadoc for java.lang.Annotation中的#34;所有已知实现类和#34;列表中没有明显的候选者)。

1 个答案:

答案 0 :(得分:0)

该属性由JSR 45添加,以支持非Java语言的调试。 JVM本身并不使用属​​性的值;它适用于调试工具。 The final release of that JSR描述了SourceDebugExtension属性的动机如下:

  

SourceDebugExtension支持

     

调试器应用程序经常需要有关源的调试信息,这些信息超出了现有JavaTM虚拟机类文件属性(SourceFile,LineNumber和LocalVariable)所提供的信息。对于调试其他语言的来源尤其如此。在分布式环境中,可能无法访问侧面文件,该信息必须与该类直接关联。

     

解决方案是添加一个包含字符串的类文件属性;该字符串包含标准格式的调试信息,允许进化和供应商扩展。

鉴于此目的,javac不太可能将任何内容放入该领域。还有另一个问题what JVM languages use the SMAP attribute的StackOverflow问题。