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;列表中没有明显的候选者)。
答案 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问题。