【问题标题】:Debug jar which was not compiled with debug flag未使用调试标志编译的调试 jar
【发布时间】:2017-06-15 17:42:50
【问题描述】:

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

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

【问题讨论】:

    标签: java debugging jar ide reverse-engineering


    【解决方案1】:

    如果它是一个 maven 依赖项,它可能是 -debug 工件是单独分发的。例如这个HSQL 依赖有两个

    • hsqldb-2.5.0.jar
    • hsqldb-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

    更多信息:

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 我没有纯源代码。当我重新编译 jar 时,我面临很多错误。该软件不是我的,并且肯定获得许可,我只是想正确调试它^^
      • 如果您没有类文件中的行号与 java 文件中的行号匹配的 jar 文件,我看不出如何针对 jar 进行调试。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      相关资源
      最近更新 更多