【问题标题】:How to view Java's byte code in eclipse IDE?如何在eclipse IDE中查看Java的字节码?
【发布时间】:2010-06-17 14:26:33
【问题描述】:

有时,在 Eclipse 中,我按下组合键将我带到显示我的 .class 文件(字节码)内容的编辑器页面。我似乎永远无法记住那个组合键是什么。

有人可以告诉我吗?

或者换句话说,一个人怎么能看到自己的字节码?

【问题讨论】:

标签: eclipse file class editor bytecode


【解决方案1】:

Eclipse 的默认类文件查看器会显示源(请参阅 VonC 的答案),如果它已与二进制文件相关联,否则它会提供类的类似 javap 的视图(带有附加源的选项)。我猜你要找的是后者。

我从来没有找到一种方法来清晰地强制 Eclipse 显示该输出而不是链接源。您可能想要的是一个 Eclipse 插件,它提供类似 Javap 的功能(或 javap 的接口)。寻找声明它们“反汇编”的插件(而不是像 jad 那样的“反编译”)。

除非使用插件,否则您可能可以配置一个外部工具来执行 javap,但它可能无法很好地与其他 eclipse 功能配合使用。

编辑:让我澄清一下:如果你按 F3,Eclipse 会执行以下操作(通常,实际过程可能会略有不同):

  1. 解析目标(如果您正在选择 Java 文件,它将是 Java 文件本身;如果您正在选择或您的光标位于类名上,它将是类声明,类似于方法声明等) .
  2. 在构建路径(首先是同一个项目)中搜索包含目标的 Java 文件。如果找到,则打开一个显示该 Java 源文件的可写编辑器。
  3. 对于类/方法声明,它会继续在您的构建路径上搜索包含该声明的类文件的引用。如果找到了,那么

    a) 如果类文件已附加源代码,请打开链接 Java 文件的只读编辑器。

    b) 如果类文件没有附加源代码,则打开一个只读面板,显示已编译类文件的反汇编(类 javap)字节码。

我的猜测是您认为 3.b) 有一个专用的键序列,但我认为没有。但同样,我很想在这里被证明是错误的。

【讨论】:

  • 有一些显示字节码的默认组合键。如果我不清楚,请原谅。这就是我所指的
  • 你说的很清楚,我理解得很好。我只是相信您弄错了,或者该功能可能是由非库存插件提供的。我很想被证明是错误的,因为我可以使用这样的捷径。如果您知道这是真的,为什么不直接通过 Preferences->General->Keys,找到绑定,然后在这里报告呢?谢谢。
  • 顺便说一下,我的回答确实处理字节码。当我说类似 javap 的视图时,这就是我的意思。 Javap 是 JDK 工具,用于显示已编译类文件中的字节码。
【解决方案2】:

使用如下外部工具配置我们可以借助javap在eclipse中查看java字节码:

要获得上述弹出窗口,请选择Run 选项并选择External Tools 并选择External Tools configuration...

${system_path:javap} 用于在 Eclipse 使用的 JDK 中定位 javap。您可以改用 javap 的绝对路径。

${project_loc} 返回项目的绝对路径。因为我找不到要使用的预定义变量,所以使用它来定位资源的.class 文件,这就是为什么javap 在项目目录中而不是包含.class 文件的目录中运行的原因。

在传递给javap的参数中:

  • bin 是 Eclipse 项目的默认输出文件夹。将此更改为 build/classes 或项目使用的任何内容。注意,该值是相对于${project_loc};您可以指定绝对路径。
  • ${java_type_name}用于获取选中的类名。

您可以在项目浏览器视图或项目导航器视图中选择一个 Java 文件,甚至可以在任何视图中选择一个 Java 类型,然后运行外部工具。注意 - 当您选择一个方法、一个内部类等然后运行该工具时,这种方法效果不佳,因为它们本身不是资源,导致${project_loc} 为空的情况。

Source


Dr. Garbage Tools is a suite of Eclipse Plugins released under Apache Open Source license.

使用 Eclipse Marketplace 安装 Bytecode Visualizer

查看字节码:

  1. 右击.java文件,选择open with并选择other会弹出如下弹窗:

  2. 搜索“Bytecode Visualizer”并选择它打开文件的选项,如下所示,您可以找到 Bytecode 选项,如图所示:


Enhanced Class Decompiler

“窗口 > 首选项 > 常规 > 编辑器 > 文件关联”

两个 .class 关联的默认值更改为您的。

"*.class" :默认选择“类反编译器查看器”。

"*.class without source" : 默认选择“Class Decompiler Viewer”。

【讨论】:

【解决方案3】:

您可以使用 ASM 4.0 插件。

安装

字节码大纲插件可以从 Eclipse 更新管理器安装到 ObjectWeb Eclipse 更新站点http://download.forge.objectweb.org/eclipse-update/ 或者,可以从 ObjectWeb Forge 站点下载该插件,然后手动安装在 Eclipse 插件目录中。

用法

查看当前 .java 或 .class 文件的字节码:

窗口 -> 显示视图 -> 其他 -> Java -> 字节码

比较两个 .java 或 .class 文件的字节码:

选择两个*.class或*.java文件->右键->比较->相互字节码

选择一个*.class或*.java文件->右键->比较->另一个类字节码

http://asm.ow2.org/eclipse/index.html

【讨论】:

【解决方案4】:

嗯...如果在 Navigator View 或 Package Explorer 视图中选择了.class,一个简单的 F3 就足以在编辑器中打开它的反编译版本。

【讨论】:

  • 或者当您将光标悬停在 Java 代码中的类型上时(或者 CTRL+单击)。请注意,Eclipse 实际上并不反编译任何东西。您只需将源源与二进制源相关联。您看到的源代码可能与编译后的类文件完全无关。 BufferManagerWriteCollect 的源代码恰好包含在 JDK 中。试着在阳光下打开几乎任何东西。** 子包,你就会明白我的意思了。
  • @Mark:我同意,即使它不完全是...“组合键”;)但同样,我的 F3 建议也不是!跨度>
【解决方案5】:

正如 user833970 所暗示的:字节码大纲插件:http://andrei.gmxhome.de/bytecode/index.html

在它的基础上,它为当前打开的 Java 文件提供了一个“字节码”视图,这是您正在寻找的。​​p>

但是,您也可以将其指定为加载任何随机 .class 文件,而不是默认的 .class 查看器,并且它在许多方面都超过了它。例如,如果您单击大纲视图中的成员,此查看器实际上会跳转到字节码中的正确位置。

下载链接(供dropin使用)可以在上述链接中找到,更新站点为http://andrei.gmxhome.de/eclipse/

【讨论】:

    【解决方案6】:

    如果您真的对字节码感兴趣,有一个 eclipse 插件可以让您使用文本编辑器打开和编辑 .class 文件的字节码。

    https://github.com/itemis/jbc

    【讨论】:

      【解决方案7】:

      我为此尝试了几种不同的解决方案。 Bytecode Visualizer(可在此处获得:https://sourceforge.net/projects/drgarbagetools/)在我看来是最好的解决方案。它整齐地显示输出,并清楚地表明它是如何链接到源代码的。我注意到对某些字节码有一些小的误解,但您可以了解它的要点。

      不幸的是,在撰写本文时,它似乎不支持 Neon。不过它确实支持火星。

      【讨论】:

        猜你喜欢
        • 2011-12-24
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多