Использовать банку с источником в качестве источника для 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 без исходного кода, шаги следующие:
распаковать jar файл
jdb -sourcepath [распакованная исходная папка] -classpath [путь к вашему основному классу]
после инициализации jdb выполнить:
stop at <package>.<yourclass>:<linenunmber>
run <your main class, for example org.springframework.boot.loader.JarLauncher>
- после срабатывания точки останова вы можете пошагово выполнить отладку с помощью команды jdb
Я не пробовал это лично, но, возможно, sourcepath
опция разрешит файлы JAR: jdb -sourcepath ${JAR_FILE} ...