Может ли 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.

Другие вопросы по тегам