如何使用fernflower使用正确的行号进行反编译?

hah*_*ahn 12 java decompiling intellij-idea

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

据我所知Idea,无法在编译代码中进行搜索(如同eclipse),但它可以使用内置程序对单个文件进行反编译fernflower,这也可以通过编译代码进行调试.

有没有办法像Idea那样以同样的方式反编译所有已编译的代码并将其附加到项目中,这样就可以搜索"Project and Libs"而无需在反编译源中丢失调试功能?

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

小智 7

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

〜/库/首选项/ IntelliJIdea2016.1 /选项/ options.xml

添加以下属性:

    <property name="decompiler.use.line.mapping" value="true" />
    <property name="decompiler.dump.original.lines" value="true" />
Run Code Online (Sandbox Code Playgroud)

  • 或通过Cmd + Shift + A - > Intellij中的注册表 (7认同)
  • @hahn - 或者只需转到“帮助菜单”&gt;“查找操作”&gt;“注册表”。然后将“decompiler.dump.original.lines”设置为true。 (2认同)
  • 在Windows中,它在:`%USERPROFILE%\.IdeaIC15\config\options\options.xml`;IntelliJ 中的快捷方式:`Ctrl + Shift + A` &gt; `Registry` (2认同)

hah*_*ahn 2

好的,因为没有关于这方面的新闻,我创建了一个小插件,它*-sources.jar使用内置反编译器将包含已编译代码的 jar 文件反编译为新文件Intellij fernflower,并将源附加到项目。任何有兴趣的人都可以查看decompile and attachjetbrains 插件存储库中的插件

更新回答我关于使用fernflower. 我在s中发现了 ' decompiler.use.line.table' 标志,它保留了行号。Intellijfernflower

  • @KilleKat 这个标志要么被​​重命名。如果你打开 Intellij 的注册表,你应该能够找到包含“反编译器”一词的键。在最新的 IDEA 中,这被命名为“decompiler.dump.original.lines”和“decompiler.use.line.mapping” (2认同)