Для тех, кому не нравится читать длинные предложения:
Я хотел бы изложить это, отметив, что у меня есть специфический вопрос, связанный с поиском исходного кода отладчика eclipse в сочетании с удаленной отладкой. Чтобы обеспечить более локализованную картину того, что я испытываю и почему эта информация актуальна, я предоставляю фоновый контекст ниже. Зная, что средний SO'er довольно ленив и, вероятно, сразу проголосует за это, я настоятельно рекомендую вам прочитать фактический вопрос. Вы можете обнаружить, что это не так широко или локализованно, как вы думали.
Фоновая информация:
У меня есть эта java-инфраструктура, предназначенная для запуска внешних скриптов. Для этого я использую комбинацию загрузчика классов и системного java-компилятора для компиляции файлов .java
"script", которые НЕ существуют на моем пути построения проекта. Все это работает, компилятор черной магии и все.
Врожденное усложнение с внешним загруженным кодом - это трудность для отладки. Я обратился к этому с помощью функции удаленной отладки Java-среды выполнения.
Итак, у меня есть конфигурация отладки, которая прикрепляется к моей исполняемой банке, которая имеет каталог с внешними java-скриптами на пути поиска источника. Это действительно РАБОТАЛО какое-то время. На самом деле, он никогда не работал должным образом, у меня просто были сценарии случайно на моем пути сборки. Достаточно путаю, я могу поставить точки останова в сценариях, и отладчик фактически STOPS там (постоянный номер строки, -verbose:class
logging и все). Понимание того, как eclipse находит исходные файлы, является тем, что могло бы помочь. Большинство документов eclipse состоит из руководств пользователя.
ЧТО Я ПОДОЗРЕВАЛ было то, что я случайно продублировал определенные файлы script и, таким образом, путал исходный поиск с исходным файлом вне синхронизации. Это не тот случай, с тех пор я удалил дублированные файлы, и затмение все еще не может найти источник.
Что я пробовал
- double, triple, fouruple проверяет пути поиска источника, обеспечивая включение всех соответствующих каталогов
- включенные/отключенные поисковые подпапки
- активированные/отключенные дубликаты поиска
- используя абсолютный путь к каталогу вместо относительного пути к рабочей области
Обход
Единственным обходным решением здесь является добавление файлов script в путь сборки проекта, что неприемлемо для меня.
Что я делаю сейчас
Я медленно проскальзываю свой путь через репозиторий баз данных проекта открытого проекта eclipse, который ищет ответ. Eclipse, как оказалось, - довольно большой проект.
Вопрос
Может ли кто-нибудь предоставить точное алгоритмическое представление о том, как работает поиск источника Eclipse?
Зная это, я мог бы выяснить способ заставить отладчика Eclipse использовать правильный путь, используя отражение. Насколько мне известно, нет технических ограничений, которые предотвращают отладку динамически скомпилированного кода. Я знаю это, потому что мои точки останова приостанавливают мои потоки, как я ожидаю, исходный код просто не хочет загружаться: (
Связанные исследования:
Кажется, что это может быть связано с тем, как класс определен с нулевым местоположением CodeSource, но, по-видимому, правильная вещь, которую нужно делать, когда динамически компилировать код в память - это дать null arg... остается вопрос о том, как/почему это важно, чтобы затмить отладчик.
Обновление 4/22 3:30:
Поэтому я преследовал решение CodeSource
, связанное выше. Теперь я вижу, что мой класс IS загружается из правильного расположения пути к файлу с помощью переключателя -verbose:class
, но исходный поиск по-прежнему не работает. Точки останова все еще правильно пойманы, но меня приветствуют знакомые красные надписи Source not found
.
Обновлено 5/6 3:15:Я преследовал решение javap
, обсуждаемое в ответе Эндрю. Оказывается, атрибут исходного файла в моем .class байт-кодеке точно соответствует файлу, который должен существовать на моем пути поиска источника. Это меня смущает, потому что это указывает на иерархию папок, влияющую на исходный поиск. Тем не менее, я создал иерархии пакетов "phantom", представляющие "истинные" пакеты (как определено в верхней части моих .java файлов) и перемещение исходных файлов в эти папки, но исходный поиск по-прежнему не работает, когда я добавляю эти пути к пути поиска исходного кода. Любое дополнительное понимание того, какие дополнительные факторы играют в исходном поиске, будет огромным.