【发布时间】:2017-06-15 17:42:50
【问题描述】:
我得到了一些未使用 debug 标志编译的 java .jar。我想通过 IDE 在远程调试中使用它们,所以我将它们反编译并作为源添加到项目中。有时刹车点会出错,甚至根本不工作。
问题是,调试未使用 -g 标志编译的 .jar 文件的最佳方法是什么。
【问题讨论】:
标签: java debugging jar ide reverse-engineering
我得到了一些未使用 debug 标志编译的 java .jar。我想通过 IDE 在远程调试中使用它们,所以我将它们反编译并作为源添加到项目中。有时刹车点会出错,甚至根本不工作。
问题是,调试未使用 -g 标志编译的 .jar 文件的最佳方法是什么。
【问题讨论】:
标签: java debugging jar ide reverse-engineering
如果它是一个 maven 依赖项,它可能是 -debug 工件是单独分发的。例如这个HSQL 依赖有两个
hsqldb-2.5.0.jarhsqldb-2.5.0-debug.jar不幸的是我没有找到更好的方法来强制 IDE (Intellij IDEA) 下载和使用这个工件,所以我手动下载了它并在 ~/.m2/repository 中替换:
wget https://repo1.maven.org/maven2/org/hsqldb/hsqldb/2.5.0/hsqldb-2.5.0-debug.jar -O ~/.m2/repository/org/hsqldb/hsqldb/2.5.0/hsqldb-2.5.0.jar
更多信息:
【讨论】:
如果您远程调试发生更改的代码并且更改未部署到远程设备,也会发生这种情况。简而言之,jar 中的命令与源代码中的行号不对应。
比我聪明的人可能会有一个棘手的答案,但对我来说阻力最小的路径是从 jar 文件中提取反编译然后重新编译的代码并对其进行调试。
99.99% 的时间我对对 jar 进行实际更改不感兴趣,我只是想知道为什么我的代码不起作用。一旦我越过了这个障碍,我就会把原来的 jar 放回原处,并确保我的代码仍然有效。这 a)(有助于确保)我没有违反许可证,并且 b) 不会使项目依赖于我的代码 - 因为反编译/重新编译可能会以微妙的方式改变行为。
请注意,某些 jar 文件具有许可证,因此简单地反编译源代码并查看它是违反许可证的。虽然我通常不会太担心,因为我无意永久使用反编译和重新编译的代码,但我只需要“看”一段时间。 :)
【讨论】: