我有一个编译了源代码的可执行 jar,我想使用 jdb 对其进行调试(不幸的是,此环境中没有其他可用的调试器)。
我可以调试它
jdb -classpath "${JAR_FILE}:${CLASS_PATH}" ${MAIN_CLASS} ${ARGS}
如何让 jdb 使用 jar 文件中内置的源代码?
注释: Java 6、AIX、ksh
如果 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>
没有亲自尝试过,但也许该sourcepath
选项将允许 JAR 文件:jdb -sourcepath ${JAR_FILE} ...