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

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

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

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

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

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

3 ответа

Решение

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

Если 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

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

На самом деле сегодня мне удалось отладить файл 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

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

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