对于我们的项目,我们正在做某种逆向工程。为此,我们必须调试第三方 jar。
我尝试用 DJ、JAD 反编译那个 jar,但输出是带有编译时错误的源代码(比如方法原型中的返回类型是布尔值,但返回 int、循环中断等)。
现在,在这个损坏的源代码中,我想调试的 .java 文件很少。我想将这几个文件的源代码与jar中的相应类一起附加。
我用谷歌搜索了这个,但没有发现任何有用的东西。???
对于我们的项目,我们正在做某种逆向工程。为此,我们必须调试第三方 jar。
我尝试用 DJ、JAD 反编译那个 jar,但输出是带有编译时错误的源代码(比如方法原型中的返回类型是布尔值,但返回 int、循环中断等)。
现在,在这个损坏的源代码中,我想调试的 .java 文件很少。我想将这几个文件的源代码与jar中的相应类一起附加。
我用谷歌搜索了这个,但没有发现任何有用的东西。???
阻碍是反编译器很可能无法用正确的行号重写源文件。因此,即使编译后的 lib 具有适当的行号信息,使用开箱即用的反编译输出也是行不通的。
即使没有源代码,您也可以在方法中设置断点(只要编译的类文件中有行号信息)。您甚至可以读取局部变量的值(同样,如果已使用调试信息编译了类),但是您必须查看反编译器输出并希望最好,反编译的方法足够接近真实的代码。
这并非不可能,但需要一些“手动”工作。
您没有提及您使用哪个 IDE 进行调试。如果尝试调试仅以类形式提供的类,Eclipse 会询问源代码。主要问题是 Andreas_D 已经提到了不匹配的行号。
我会尝试以下。
在 java 代码中附加类的源代码:
右键单击所需的类
转到打开声明[F3]
类文件编辑器将打开单击附加源按钮
浏览有源代码的jar
点击<Ok>
完成上述步骤后,Open Declaration 将打开有源代码的.class 文件。