Eclipse插件之Bytecode Outline

2023-11-19


  本文介绍如何利用Eclipse插件Bytecode Outline在Eclipse中的操作使用。

  Eclipse是目前非常流行的开发平台,开放扩展的架构让很多程序员找到了自己个性化的工作环境。

  Bytecode Outline 插件可以把当前的正在编辑Java的文件或者class文件直接显示出其相应的字节码出来,而且可以进行两个Java文件的字节码比较或者两个class文件的字节码比较或一个Java文件与一个class文件进行字节码的比较。

安装

JDK:1.5.0 从http://java.sun.com 上去下载安装
Eclipse:3.1.1 从http://www.eclipse.org 上去下载解压
Bytecode Outline 主页http://asm.objectweb.org/eclipse/bco/index.html

技巧

  Eclipse使用技巧之插件管理

  提示:新下载的插件PlugIn一定不要都放在原始的Eclipse目录下去,一大堆,累死你:(

  1. 前提是你已经安装好了Eclipse工具了,比如安装在E:/OpenSource/Eclipse/目录下,以下这个目录以%ECLIPSE_HOME%来进行表示;
  2. 此时默认的插件是在%ECLIPSE_HOME%/plugins目录中的;
  3. 在%ECLIPSE_HOME%下建立一个PlugInsNew的目录;

      比如:E:/OpenSource/Eclipse/PlugInsNew/

  4. 你下载了个新的插件,比如叫做:XYZ   那么就在%ECLIPSE_HOME%/PlugInsNew/目录下建立XYZ目录,目录里面是eclipse目录,eclipse目录包含有features与plugins两个子目录;结构如下图所示:

     

  5. 把下载的新插件的文件放在以下相应目录中

      %ECLIPSE_HOME%/PlugInsNew/XYZ/eclipse/features
      %ECLIPSE_HOME%/PlugInsNew/ XYZ/eclipse/plugins

  6. 建立相关的.link的文件
      然后在%ECLIPSE_HOME%/links目录里建立一个XYZ.link的文件
    内容如是:path=E:/OpenSource/Eclipse/PlugInsNew/XYZ就一行这样的路径指示而已。
    这样,如果你下载了多个插件就可以如法炮制建立多个Link文件,想加载哪个插件就把哪个插件的Link文件放到%ECLIPSE_HOME%/links的目录中即可,使用与管理都很方便,建议千万不要放在默认的安装目录中;
    如果你的%ECLIPSE_HOME%与此不同,请修改XYZ.link文件里的路径
  7. 删除,关闭Eclipse
      删除%ECLIPSE_HOME%/links/XYZ.link文件即可
    删除%ECLIPSE_HOME%/PlugInsNew/XYZ整个目录及文件
  8. 重新启动Eclipse即可

安装细节

  Bytecode Outline插件安装方法有两种方式:

  • 一种就是采用上一节的《Eclipse使用技巧之插件管理》
    注意:因为Bytecode Outline的运行需要ASM Framework,所以也要下载这个文件
    进入到http://forge.objectweb.org/projects/asm/ 中,下载到如下两项内容的文件
    bytecode-outline 2.0.2 June 18, 2005,文件名de.loskutov.BytecodeOutline_2.0.2.jar
    asm-plugin 2.2.1 December 14, 2005,文件名org.objectweb.asm_2.2.1.jar
    并相应将这两个文件解压到
    bytecode/eclipse/plugins/de.loskutov.BytecodeOutline_2.0.2/
    bytecode/eclipse/plugins/org.objectweb.asm_2.2.1/
    的目录下面,如下图所示,重新启动即可。

  •   另一种就是通过Update Manager的形式来下载安装
    地址是:http://download.forge.objectweb.org/eclipse-update/
    安装步骤如下:

      Help => Software Updates => Find and Install…

      选择Search for new features to install,下一步

  新建一个站点,New Remote Site =>
  Name里填入Bytecode Outline
  URL里填入http://download.forge.objectweb.org/eclipse-update/
  OK后,Finish完成之

  于是出现这个站点的相关插件,对于Bytecode Outline来说,仅需要asm和bytecode-outline两项即可,当然把jonas-dev和org-exoplatform-eclipse-plugins也弄下来用用也不错的,全选上(^_^)

   接下来就是接受协议并下一步了

  出现安装的路径选择,点击Change Location …更改你的Plugin安装路径,最好同上面所说的新的插件分开路径进行安装,于是就可以选择在PlugInsNew目录下的bytecode/eclipse来进行存放它了。

  四项内容,每个都要进行Change Location…,赫赫,比较麻烦了些,不过要是为了分开进行存放,你可以四个都存放到不一样的路径当中去,但是都要建立Link文件。

  下载完成后,提示你安装,选择安装所有Install All。

  顺利安装完成,出现重启提示。
注意:在点Yes之前,如果你刚才选择的路径不是默认的Eclipse插件的安装路径,你还是要建立一下Link文件!!!

  重新启动Eclipse后,可以在菜单Window => Show View => Other => Java => 可以看到多了Bytecode、Bytecode Reference两项,把这两项打开显示出来。

使用

  我们简单地创建一个示例工程,里面包含有一个接口类与两个实现该接口的实现类进行演示说明使用的方法。

接口类:IHelloWorld.java
public interface IHelloWorld
{
	String sayHelloWorld();
}

实现类一:HelloWorld1.java
public class HelloWorld1 implements IHelloWorld
{
	public HelloWorld1()
	{
		super();
	}

	public String sayHelloWorld()
	{
		return "Hello World HelloWorld1";
	}
}

实现类二:HelloWorld2.java
public class HelloWorld2 implements IHelloWorld
{
	public HelloWorld2()
	{
		super();
	}

	public String sayHelloWorld()
	{
		return "Hello World HelloWorld2";
	}
}

  双击打开IHelloWorld.java文件,在Bytecode窗口中可以看到如下信息:

  当光标定位在sayHelloWorld上面,则Bytecode内容相应地进行改变。

  点击ASM图标可以在true bytecode和ASMifier Java code 视图间进行切换

  当光标定位在sayHelloWorld上面,则Bytecode内容相应地进行改变。

  选中Link With Editor图标,当Java编辑器中当前的Java文件改变时,Bytecode里的内容会跟随着进行改变,方便进行查看。

  选中Show bytecode for current field/method only图标,当Java编辑器中当前的Java文件定位在某个域或方法时,则仅显示域或方法的字节码,方便进行查看,如下图仅定位在sayHelloWorld方法上,仅显示这个方法的相关信息。

  选中时,会把相关的附加信息也显示,比如下面的String,就会把java.lang包名都显示出来了。

  这些开关也可以通过下拉菜单来进行切换与设置,一样的操作方法。

  选中图标,可以切换到字节码的指令集视图上面来,当光标定位到不同的上面就会同样定位到相应的指令上,同样,在指令上面点击,相应地会定位到指令所对应的代码上去。

  比较两个Java代码的字节码

  相异之处特殊显示出来,以供查看。

  切换到ASM视图进行比较

  比较两个class代码的字节码

  比较一个Java文件和一个class文件的字节码

  选择比较其它的Java或class文件进行比较

  选择文件

  附带的JVM指令参考JVM Instruction Reference,有比较详细的资料说明。

  Help => Help Contents => JVM Instruction Reference

  更多的使用方法可以参阅: http://andrei.gmxhome.de/bytecode/index.html

总结

  这是一个很不错的学习编译、反编译、字节码的工具。

 作者简介
  dev2dev ID: YuLimin, BEA dev2dev论坛Web Application Development版版主。
主页:http://202.101.111.1/123/
博客:http://iAMin.BlogDriver.com
dot dot dot

   作者其它文章
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Eclipse插件之Bytecode Outline 的相关文章

  • Zuul不转发请求到其他微服务

    我正在使用 Spring Boot 微服务 我已经配置了 eureka zuul 代理和另一个微服务 帐户 如果我直接从帐户拨打电话 则工作正常 帐户和 zuul 服务器都显示在 eureka 上 当我尝试使用 zuul 代理进行访问时 它
  • Java 扫描仪问题 (JFrame)

    我正在尝试使用扫描仪来编辑塔防游戏的级别 但是 它不会将级别 图块图像 更新为自定义文件的级别 0 是草 1 是石头 1 是什么都没有 等等 我发现了错误 但如何修复它 我需要添加 更改什么才能消除这个错误 java lang NullPo
  • JaxB2Marshaller 未将 XML 绑定到 Kotlin 数据类

    我正在编写一个批处理作业来解析 XML 提取字段并将它们保存在数据库中 解析 XML 时 它会选取 2 个根元素 但将所有字段保留为空 因此在我的数据库中 我有 2 条记录将为空字段 似乎无法弄清楚为什么它无法读取元素 TIA Bean f
  • Java泛型类型要么扩展要么是父类

    我正在寻找一些如下所示的代码 public class Parent
  • 如何通过双击图标来执行JAVA程序?

    我写了一个java程序 现在我想在没有 IDE Eclipse 等的情况下打开我的控制台 java 应用程序 只需双击桌面上的可执行版本即可 我已将 java 项目导出为 Runnable JAR 文件 但无法打开 当我尝试使用cmd打开应
  • 在 Spring Security 中创建自定义 PostAuthorize 方法

    我正在尝试创建一个自定义方法 用于预 后授权调用 如下所示 public class CustomLSecurityExpressionHandler extends DefaultMethodSecurityExpressionHandl
  • 原型 Bean 未按预期自动装配

    测试控制器 java RestController public class TestController Autowired private TestClass testClass RequestMapping value test me
  • Java Swing 自定义形状(2D 图形)

    我需要绘制自定义形状 现在 当用户单击面板上的几个点时 我使用多边形创建一个形状 public void mouseClicked MouseEvent e polygon addPoint e getX e getY repaint 但我
  • Java setLocation() 事故

    我正处于创建一个程序来操作员工 客户系统的开始阶段 现在我刚刚创建了登录 GUI 但我遇到了一些问题 setLocation 方法 我将其设置为 250 250 但这使我的 GUI 高度变得非常疯狂 如果有人能够解决这个问题 我的代码如下
  • 如何将多个值存储到一个键(java)

    我搜索一个可以存储多个键值对的数据结构 数据基本上是这样的 1 value 1 2 value 2 于是我想到了使用HashMap 遗憾的是 这对我不起作用 因为一个键可能会出现多个值 在上面的例子中 1 value 2 可能是另一个条目
  • egit:设置gitignore忽略所有eclipse项目文件

    我在 github 上有一个项目 我想从中删除所有与 eclipse 相关的文件 并允许克隆它的人使用他们想要的任何 ide 这是该项目 https github com vedi0boy Archipelo https github co
  • 使用 testcontainer 作为 Dockerfile 的一部分运行测试

    我的 dockerfile 看起来像这样 FROM maven 3 jdk 11 slim COPY pom xml COPY src src RUN mvn clean install 这意味着构建的一部分是单元测试的执行 一些单元测试使
  • 无法使用 Jsoup HTML 解析器 Java 实现某些功能

    我无法使用 Jsoup Java 库解析以下场景的一些文本 1 This is b My Text b some other b b text as well b b b non empty tag1 b other text 预期输出 s
  • 是否有适合 Java 1.4 和 SE (Swing) 应用程序的优秀 DI 框架?

    我正在寻找一个适用于在 JDK 1 4 下运行的 Java SE Swing 应用程序的依赖注入框架 有没有我可以使用的推荐 DI 框架 Guice 和其他基于注释的框架已经退出 我不想搞乱像 Retroweaver 这样的东西 另外 Sp
  • Android 自定义相机 - 在矩形内裁剪图像

    我有一个自定义相机应用程序 它有一个居中的矩形视图 如下所示 当我拍照时 我想忽略矩形之外的所有内容 该视图与我的 XML 视图中的 Camera Preview 或 SurfaceView 没有任何联系 如下所示
  • 用 Java 编写“漂亮”代码的标准? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么C++中没有“NULL引用”?

    我正在阅读 C 常见问题解答 8 6 什么时候应该使用引用 什么时候应该使用指针 http www parashift com c faq lite refs vs ptrs html 特别是以下声明 可以时使用引用 必要时使用指针 上述情
  • Xuggler 未转换 .webm 文件?

    我只是尝试使用 Xuggler 将 mov 文件转换为 webm 这应该可以工作 因为 FFMPEG 支持 webm 文件 这是我的代码 IMediaReader reader ToolFactory makeReader home use
  • Android 调整图片大小

    我的图像存储在 SD 卡上 每个大小约为 4MB 我想调整每个的大小 而不是将其设置为 ImageView 但我不能使用BitmapFactory decodeFile path 因为异常 java lang OutOfMemoryErro
  • 除了前一个按钮意图之外,如何添加另一个按钮意图?

    这是我的代码 它包含一个名为的按钮button1A当我单击它时 它会打开一个名为的列表list1 如何为另一个名为 button2A 的按钮添加代码 该按钮将打开一个列表 List2 import android os Bundle imp

随机推荐

  • 实现三角形类Tri,数据成员包含三个Point类对象,实现判断两个三角形全等

    实现三角形类Tri 数据成员包含三个Point类对象 实现从屏幕输入三个点的坐标 用于构造Tri的一个对象 实现函数Cong 判断两个三角形是否全等 include
  • ffmpeg 判断关键帧

    当mp4的profile为high的时候 avpacket 1并不能判断是否是关键帧 很多不是的也被误判断成关键帧了 具体做法应该是 进一步判断字节 int is keyframe h264 AVPacket pkt printf 02x
  • 什么是javascript内存泄漏?以及解决方法

    什么是javascript内存泄漏 以及解决方法 一 什么是javascript内存泄漏 二 常见的内存泄漏 1 意外的全局变量 通常是变量未被定义或者胡乱引用了全局变量 2 计时器 3 闭包 4 事件监听未被移除 5 console lo
  • ESP32-AT指令学习笔记

    目录 前言 一 硬件和软件准备 二 使用步骤 1 下载固件 2 接线 总结 前言 针对 ESP32 芯片 实现了一些常用的 AT 指令集 链接地址为 ESP32 AT指令集 该指令集可用于用户 MCU PC 同 ESP32 进行交互 也适用
  • 数据库系统概论第五版课后习题答案第七章

    第七章 数据库设计 1 试述数据库设计过程 答 这里只概要列出数据库设计过程的六个阶段 l 需求分析 2 概念结构设计 3 逻辑结构设计 4 数据库物理设计 5 数据库实施 6 数据库运行和维护 这是一个完整的实际数据库及其应用系统的设计过
  • Spring总结

    1 Spring概述 1 1 简介 Spring 春天 gt 给软件行业带来了春天 2002年 Rod Jahnson首次推出了Spring框架雏形interface21框架 2004年3月24日 Spring框架以interface21框
  • 企业及个人如何有效防护网络攻击

    企业及个人如何有效防护网络攻击 众所周知 网络攻击手段有很多 让人眼花缭乱 防不胜防 其带来的危害和影响也非常之大 因此 如何防范网络攻击 成为大家关注的重点 本文为大家介绍一些防范网络攻击的小技巧 快来看看吧 1 对于个人来说 密码不少于
  • 赛事

    第25届中国机器人及人工智能大赛成功举办 2023年6月13日至14日 第二十五届中国机器人及人工智能大赛于海南科技职业大学成功举办 大赛由中国人工智能学会主办 共有来自清华大学 哈尔滨工业大学 中国科学技术大学 西安交通大学等500多所高
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • MATLAB实现CNN-LSTM卷积长短期记忆神经网络数据分类预测

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 内容介绍 一种基于长短时记忆网络和卷积神经网络的文本分类方法 首先 利用词向量将输入文本进行向
  • Win7 64位操作系统连接HP 1010打印机完美解决方案

    工作的第一天就遇到问题 新电脑无法连接老式的HP1010打印机 64位Windows7系统无法连接32位XP网络共享打印机 而32位WIN7就可以 这里分享个简单的解决方法 先去下载一个64位的打印机驱动 然后添加打印机 注意这里要添加的是
  • SQL---DML---ORDER BY排序检索子句的几种方式

    关系数据库设计理论认为 如果不明确规定排序顺序 则不应该假定检索出的数据的顺序有意义 为了明确地排序用SELECT语句检索出来的数据 可使用ORDER BY子句 排序一列数据 SELECT 列名1 FROM 表名 ORDER BY 列名2
  • 【2022年MathorCup大数据竞赛】B题:北京移动用户体验影响因素研究(四)(问题一的千余行代码整理)

    目录 代码整理 一 问题一附件1语音业务数据集处理代码 二 问题一附件2上网业务数据集处理代码 一 问题一附件1语音业务数据集处理代码 问题一附件1语音业务数据集处理代码 import numpy as np import pandas a
  • 打包前后端项目并部署至服务器

    1 打包前端项目 打包命令 npm run build 执行完命令后 会生成一个名为 dist 的文件夹 这个就是打包好的前端项目 2 打包后端项目 2 1 执行 maven 的 clean 删除项目编译创建的 target 文件夹 2 2
  • fastcgi 模块各个常用变量的意义

    nginx fasrcgi 模块的文档 http nginx org en docs http ngx http fastcgi module html fastcgi pass 设置FastCGI服务器的地址 将匹配到该location的
  • C语言程序的结构

    1 C语言程序主要由函数构成 函数是C语言程序的基本单位 一个C语言源程序必须有一个main函数 可以包含一个main函数和若干个其他函数 主函数可以调用其他函数 其他函数之间可以互相调用 但其他函数不能调用主函数 被调用的函数可以是系统提
  • 时序算法研究系列之Prophet安装(准备篇)

    前言 新开一个关于时序数据预测算法的系列博客 计划整理目前的时序数列的预测方法 原理 应用 心得等 其中Prophet因为在安装时候踩了很多雷 所以专门开一个准备篇写安装过程 下一篇讲述具体应用 目录 前言 Prophet 简介 方法一 方
  • 查看字节码

    1 安装插件 ASM Bytecode outline 与hexview 2 查看字节码 源码 package com asm public class HelloWorld public static void main System o
  • 【华为OD机试真题 JAVA】求最多可以派出多少支团队

    JS版 华为OD机试真题 JS 求最多可以派出多少支团队 标题 求最多可以派出多少支团队 时间限制 1秒 内存限制 262144K 语言限制 不限 用数组代表每个人的能力 一个比赛活动要求参赛团队的最低能力值为N 每个团队可以由1人或2人组
  • Eclipse插件之Bytecode Outline

    本文介绍如何利用Eclipse插件Bytecode Outline在Eclipse中的操作使用 Eclipse是目前非常流行的开发平台 开放扩展的架构让很多程序员找到了自己个性化的工作环境 Bytecode Outline 插件可以把当前的