Использовать банку с источником в качестве источника для jdb?

У меня есть исполняемый файл jar с скомпилированным исходным кодом, и я хочу отладить его с помощью jdb (к сожалению, в этой среде нет другого отладчика).

Я могу отладить его с помощью

jdb -classpath "${JAR_FILE}:${CLASS_PATH}" ${MAIN_CLASS} ${ARGS}

Как я могу заставить jdb использовать источник, встроенный в файл jar?

Примечания: Java 6, AIX, ksh


person C. Ross    schedule 08.09.2010    source источник


Ответы (4)


Если jdb игнорирует записи *.jar и *.zip для sourcepath, возможно, вы можете создать пакетный файл, чтобы расширить источник из целевого jar во временный каталог и указать на него sourcepath.

Что-то вроде этого

MYDEBUGDIR=/temp/source/mydebug
jar -xf target.jar -C $MYDEBUGDIR
jdb -sourcepath ${MYDEBUGDIR} -classpath "${JAR_FILE}:${CLASS_PATH}" ${MAIN_CLASS} ${ARGS}
rmdir -r $MYDEBUGDIR

Таким образом, источник отладки синхронизируется с банкой и очищается после себя.

person Kelly S. French    schedule 12.11.2010

Это может быть невозможно, как указано в этом (очень старом) сообщении на форумы.

person C. Ross    schedule 08.09.2010
comment
Ницца. Исходный код для jdb явно игнорирует записи *.jar и *.zip для sourcepath. - person kschneid; 09.09.2010
comment
@kschneid, спасибо за проверку. Держитесь, нам нужно больше таких, как вы. - person C. Ross; 09.09.2010
comment
@kschneid Теперь, когда Oracle захватила Sun, мне трудно найти ссылку на исходный код jdb :-(, но я поверю вам на слово. Хромо. - person Ogre Psalm33; 14.10.2011
comment
И, по-видимому, Oracle счел нужным удалить свои очень старые сообщения на форуме. Ссылка сейчас не работает. :'( - person Ogre Psalm33; 14.10.2011

Не пробовал это лично, но, возможно, опция sourcepath разрешит файлы JAR: jdb -sourcepath ${JAR_FILE} ...

person kschneid    schedule 08.09.2010

на самом деле сегодня мне удалось отладить файл jar без исходного кода, шаги следующие:

  1. распаковать jar-файл

  2. jdb -sourcepath [разархивированная исходная папка] -classpath [путь к вашему основному классу]

  3. после инициализации jdb выполнить:

stop at <package>.<yourclass>:<linenunmber>
run <your main class, for example org.springframework.boot.loader.JarLauncher>
  1. после срабатывания точки останова вы можете пошагово отлаживать с помощью команды jdb
person LIU YUE    schedule 29.10.2019