Может ли javac предоставить атрибут "информация о расширении отладки источника" класса?
Формат файла класса Java поддерживает атрибут "расширение отладки источника" (см. Спецификацию языка Java §4.7.11 "The SourceDebugExtension
атрибут ").
В JVM, которые поддерживают этот аспект JVMTI, вы можете запросить эту строку, используяjvmtiError GetSourceDebugExtension(jvmtiEnv *, jclass, char **)
,
У меня вопрос, есть ли способ использовать обычный javac
и язык Java для встраивания информации "расширения отладки источника" в .class
файл. Похоже, что в базовом языке Java нет аннотации, которая бы это делала (нет очевидных кандидатов в списке "Все известные классы реализации" в javadoc дляjava.lang.Annotation
).
1 ответ
Этот атрибут был добавлен в JSR 45 для поддержки отладки на языках, отличных от Java. Сама JVM не использует значение атрибута; это предназначено для инструментов отладки. Финальная версия этого JSR описывает мотивацию для SourceDebugExtension
атрибут следующим образом:
Поддержка SourceDebugExtension
Приложениям отладчика часто требуется отладочная информация об источнике, которая превышает то, что предоставляется существующими атрибутами файла класса виртуальной машины JavaTM (SourceFile, LineNumber и LocalVariable). Это особенно верно для отладки источника других языков. В распределенной среде сторонние файлы могут быть недоступны, информация должна быть напрямую связана с классом.
Решением является добавление атрибута файла класса, который содержит строку; Строка содержит отладочную информацию в стандартизированном формате, который учитывает развитие и расширение поставщика.
Учитывая эту цель, маловероятно, что javac поместит что-либо в эту область. Есть еще один вопрос Stackru, спрашивающий, какие языки JVM используют атрибут SMAP.