【问题标题】:How to decompile with correct line numbers using fernflower?如何使用蕨类植物以正确的行号反编译?
【发布时间】:2017-02-26 06:47:53
【问题描述】:

我正在使用 Intellij Idea 14 处理大型 Java 项目,其中编译了大量代码并且没有源代码。

据我所知Idea 无法在编译后的代码中进行搜索(就像eclipse 所做的那样),但它可以使用内置的fernflower 反编译单个文件,这也提供了通过调试的可能性编译代码。

有没有办法像 Idea 一样一次反编译所有已编译的代码并将其附加到项目中,这样就可以在“项目和库”中搜索而不会失去反编译源中的调试功能?

我尝试使用 Bytecodeviewer 和不同的 fernflower 选项,但结果是在附加反编译的源代码后调试被破坏(显示错误的行)。

【问题讨论】:

  • 我认为任何反编译器都不能篡改原始行号。如果您能在 Eclipse 中使用反编译的源代码正确调试,我会感到惊讶。
  • 不确定 Eclipse,但 Intellij Idea 可以做到这一点。 blog.jetbrains.com/idea/2015/02/…
  • 这真的很有趣,谢谢@hahn。
  • @stiver 有什么帮助吗?

标签: java intellij-idea decompiling


【解决方案1】:

我发现在 OSX 上,您可以在以下文件中更改此设置:

~/Library/Preferences/IntelliJIdea2016.1/options/options.xml

添加以下属性:

    <property name="decompiler.use.line.mapping" value="true" />
    <property name="decompiler.dump.original.lines" value="true" />

【讨论】:

  • 或通过 Cmd + Shift + A -> Intellij 中的注册表
  • @hahn - 或者直接转到帮助菜单 > 查找操作 > 注册表。然后将“decompiler.dump.original.lines”设置为true。
  • 在 Windows 中,它位于:%USERPROFILE%\.IdeaIC15\config\options\options.xml; IntelliJ 中的快捷键:Ctrl + Shift + A > Registry
【解决方案2】:

好的,因为没有这方面的消息,我创建了一个小插件,它使用内置的 Intellij fernflower 反编译器将带有编译代码的 jar 文件反编译为新的 *-sources.jar 文件,并将源附加到项目.有兴趣的可以看看jetbrains插件库中的decompile and attach插件

更新 使用fernflower 回答我关于反编译代码中行号的问题。我在Intellijfernflower 中发现了'decompiler.use.line.table' 标志,它保留了行号。

【讨论】:

  • 这个标志在哪里?在哪个文件中?
  • @KilleKat 此标志已重命名。如果您打开 Intellij 的注册表,您应该能够找到包含“反编译器”字样的键。在最新的 IDEA 中,这被命名为“decompiler.dump.original.lines”和“decompiler.use.line.mapping”
  • @Mafick - 请参阅上面答案或我的哈恩的评论。
猜你喜欢
  • 2018-04-11
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 2011-08-15
相关资源
最近更新 更多