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

问题描述 投票:4回答:1

Java类文件格式支持名为“源调试扩展”的属性(请参阅Java language specification §4.7.11 "TheSourceDebugExtension attribute")。

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

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

java annotations jvmti
1个回答
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问题。

© www.soinside.com 2019 - 2024. All rights reserved.