没有用debug标志编译的调试jar

时间:2017-01-30 14:15:54

标签: java debugging jar ide reverse-engineering

我得到了一些未使用 debug 标志编译的java .jar 。我想通过IDE在远程调试中使用它们,所以我反编译它们并作为源添加到项目中。有时制动点工作错误或根本不工作。

问题是,调试未使用-g标志编译的 .jar 文件的最佳方法是什么。

2 个答案:

答案 0 :(得分:2)

如果是Maven依赖项,则可能是-debug工件单独分发。例如,此HSQL依赖项同时具有

  • hsqldb-2.5.0.jar
  • hsqldb-2.5.0-debug.jar

不幸的是,我没有找到一种更好的方法来强制IDE(Intellij IDEA)下载和使用此工件,因此我手动下载了它并替换为〜/ .m2 / repository :< / p>

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

更多信息:

答案 1 :(得分:0)

如果您远程调试已经发生更改且未将更改部署到远程设备的代码,也会发生这种情况。简而言之,jar中的命令与源代码中的行号不一致。

比我更聪明的人可能会有一个棘手的答案,但对我来说,阻力最小的路径是从jar文件中反编译并重新编译代码并调试它。

99.99%的时间我对jar的实际更改不感兴趣,因为我只是想知道为什么我的代码不起作用。一旦我超越了这个障碍,我就会将原来的罐子放回原位并确保我的代码仍然有效。这个a)(有助于确保)我没有违反许可证,并且b)不会使项目依赖于我的代码 - 因为反编译/重新编译可能会以微妙的方式改变行为。

请注意,某些jar文件具有许可证,只需反编译源并查看它就是违反许可证的行为。虽然我通常不太担心,因为我无意永久使用反编译和重新编译的代码,我只需要“看”它一段时间。 :)