6

Java 类文件格式支持称为“源调试扩展”的属性(请参阅Java 语言规范 §4.7.11 “SourceDebugExtension属性”)。

在支持 JVMTI 这一方面的 JVM 中,您可以使用jvmtiError GetSourceDebugExtension(jvmtiEnv *, jclass, char **).

我的问题是是否有办法使用普通javac和 Java 语言在文件中嵌入“源调试扩展”信息.class。核心 Java 语言中似乎没有注释可以做到这一点(在javadocjava.lang.Annotation的“所有已知的实现类”列表中没有明显的候选者)。

4

1 回答 1

2

JSR 45添加了该属性以支持在非 Java 语言中进行调试。JVM 本身不使用属性的值;它用于调试工具。该 JSR 的最终版本描述了该属性的动机SourceDebugExtension如下:

SourceDebugExtension 支持

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

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

鉴于此目的,javac 不太可能在该字段中添加任何内容。还有另一个 StackOverflow 问题,询问哪些 JVM 语言使用 SMAP 属性

于 2017-12-28T13:40:23.943 回答