繁体   English   中英

在jar中为某些类附加源

[英]Attaching source for some classes in a jar

对于我们的项目,我们正在进行逆向工程。 为此,我们必须调试第三方jar。

我尝试用DJ,JAD反编译该jar,但输出是带有编译时错误的源代码(例如,方法原型中的返回类型为boolean,但返回int,为循环中断等)。

现在,在这个损坏的源代码中,有几个.java文件,我想调试。 我想在jar中附加这几个文件的源代码和相应的类。

我用谷歌搜索,但没有发现任何有用的东西。 ????

阻止程序是反编译器很可能无法使用正确的行号重写源文件。 因此,即使已编译的库具有适当的行号信息,也不能使用开箱即用的反编译输出。

您可以在方法中设置断点(只要编译的类文件中有行号信息),即使没有源代码也是如此。 您甚至可以读取局部变量的值(同样,如果已经使用调试信息编译了类),但是您必须查看反编译器输出并希望最好,反编译方法足够接近真实的代码。

这不是不可能,但需要一些“手动”工作。

要在java代码中附加类的源代码:

  • 右键单击所需的类

  • 转到公开声明[F3]
    类文件编辑器将打开单击Attach Source按钮

  • 浏览具有源代码的jar

  • 单击<确定>
    完成上述步骤后,打开声明将打开具有源代码的.class文件。

您没有提到您用于调试的IDE。 如果尝试调试仅在类窗体中可用的类,Eclipse会询问源代码。 主要问题是Andreas_D已经提到了不匹配的行号。

我会尝试以下方法。

  1. 删除尚未在工作状态下反编译的所有反编译的java文件。
  2. 尝试使用classpath中的原始JAR编译每个可反编译的Java文件。 这允许您使用正确的行信息生成新的类文件以进行调试。
  3. 现在用您已成功重新编译的文件替换JAR文件中的类文件。 还添加Java文件。 您的调试IDE应该自动识别源文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM