9

我有一个编译了源代码的可执行 jar,我想使用 jdb 对其进行调试(不幸的是,此环境中没有其他可用的调试器)。

我可以调试它

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

如何让 jdb 使用 jar 文件中内置的源代码?

注释: Java 6、AIX、ksh

4

4 回答 4

8

如果 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 同步,并且它会自行清理。

于 2010-11-12T15:26:45.343 回答
5

正如论坛上的这篇(非常旧的)帖子所述,这可能是不可能的。

于 2010-09-08T16:53:36.430 回答
1

实际上我今天设法调试成一个没有源代码的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 命令逐步调试
于 2019-10-29T08:36:54.660 回答
0

没有亲自尝试过,但也许该sourcepath选项将允许 JAR 文件:jdb -sourcepath ${JAR_FILE} ...

于 2010-09-08T14:41:51.223 回答