Реализовать другой уровень для интерфейса Java Debugger

#java #debugging #scala #jruby #jdi

#java #отладка #scala #jruby #jdi

Вопрос:

В документации по интерфейсу Java Debugger для класса Location есть параграф, в котором обсуждается «уровень» местоположения. Я немного поискал более подробную информацию о том, как можно было бы реализовать новый слой (скажем, для Scala или JRuby), но я мало что нашел. Кто-нибудь может пролить свет на эту тему?

Комментарии:

1. Вы смотрели спецификацию для JSR-45 (Поддержка отладки для других языков)? jcp.org/en/jsr/detail?id=45

2. У меня не было, нет. Спасибо за указатель, это немного помогает.

3. Я смутно припоминаю, что файл класса имеет атрибут, указывающий на исходный файл — вы пробовали просто установить его в файл на другом языке?

Ответ №1:

Strata на самом деле не подходит для Scala или JRuby, поскольку они компилируются непосредственно в байт-коды, поэтому атрибутов SourceFile и LineNumberTable достаточно. Уровни предназначены для таких вещей, как JSP, которые транслируются в исходный файл Java и компилируются. Уровни определяются с помощью карты исходного кода (SMAP), хранящейся в атрибуте SourceDebugExtension. Подробная информация о том, как все это работает, является частью JSR-45. Другим примером может быть компилятор конечного автомата, хотя я не верю, что он генерирует SMAP. Я также не уверен, есть ли в javac опция для встраивания SMAP в файл класса. Для этого вам понадобится отдельный инструмент.

Комментарии:

1. Фактически, номера строк недостаточно точны для отображения адреса байт-кода -> позиции источника для кода Scala. Данная строка кода Scala может легко привести ко многим значимым точкам останова, но текущие отладчики не могут определить положение своего источника в такой строке.