`
hatedance
  • 浏览: 60608 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

JVM学习-2.1 编译并调试openjdk的zero版 之CDT篇

 
阅读更多

上篇解决了在netbeans下编译调试openjdk的问题。毕竟用惯了eclipse,我想着尝试用eclipse CDT来替代Netbeans.结果成功了。

过程如下:

  1. 在eclipse里Import项目,选择Exsiting code as makefile project,选择项目目录:icedtea6/openjdk-ecj/hotspot
  2. 配置项目,首先是build,在
    1. Builder Setting里,Build directory=${workspace_loc:/hotspot}/../..
    2. Behavior里,Build(Incremental build)=hotspot, clean不要选中
  3. 配置代码提示部分,C/C++Generall > Paths and Symbols.下面的是从.cproject文件里复制出来的,定义了很多宏
    1. C Symbols Tab,即预处理宏:
      <listOptionValue builtIn="false" value="CC_INTERP"/>
      <listOptionValue builtIn="false" value="&quot;DERIVATIVE_ID=&quot;IcedTea6 1.12pre+r3c02d4ef4cdd+&quot;"/>
      <listOptionValue builtIn="false" value="&quot;DISTRIBUTION_ID=&quot;Built on Ubuntu 10.04.4 LTS (Thu Feb 16 14:00:21 CST 2012)&quot;"/>
      <listOptionValue builtIn="false" value="HOTSPOT_BUILD_TARGET=&quot;product&quot;"/>
      <listOptionValue builtIn="false" value="HOTSPOT_BUILD_USER=&quot;jack&quot;"/>
      <listOptionValue builtIn="false" value="HOTSPOT_LIB_ARCH=&quot;i386&quot;"/>
      <listOptionValue builtIn="false" value="HOTSPOT_RELEASE_VERSION=&quot;20.0-b12&quot;"/>
      <listOptionValue builtIn="false" value="HOTSPOT_VM_DISTRO=&quot;OpenJDK&quot;"/>
      <listOptionValue builtIn="false" value="IA32"/>
      <listOptionValue builtIn="false" value="JRE_RELEASE_VERSION=&quot;1.6.0_24-b24&quot;"/>
      <listOptionValue builtIn="false" value="LINUX"/>
      <listOptionValue builtIn="false" value="PRODUCT"/>
      <listOptionValue builtIn="false" value="TARGET_ARCH_MODEL_zero"/>
      <listOptionValue builtIn="false" value="TARGET_ARCH_zero"/>
      <listOptionValue builtIn="false" value="TARGET_COMPILER_gcc"/>
      <listOptionValue builtIn="false" value="TARGET_OS_ARCH_MODEL_linux_zero"/>
      <listOptionValue builtIn="false" value="TARGET_OS_ARCH_linux_zero"/>
      <listOptionValue builtIn="false" value="TARGET_OS_FAMILY_linux"/>
      <listOptionValue builtIn="false" value="VM_LITTLE_ENDIAN"/>
      <listOptionValue builtIn="false" value="ZERO"/>
      <listOptionValue builtIn="false" value="ZERO_LIBARCH=&quot;i386&quot;"/>
      <listOptionValue builtIn="false" value="_GNU_SOURCE"/>
      <listOptionValue builtIn="false" value="_REENTRANT"/>
      <listOptionValue builtIn="false" value="DEBUG_PRINT_METHOD"/>
       
    2. C++ Symbols,
      <listOptionValue builtIn="false" value="ARCH=&quot;i386&quot;"/>
      <listOptionValue builtIn="false" value="CC_INTERP"/>
      <listOptionValue builtIn="false" value="&quot;DERIVATIVE_ID=&quot;IcedTea6 1.12pre+r3c02d4ef4cdd+&quot;"/>
      <listOptionValue builtIn="false" value="&quot;DISTRIBUTION_ID=&quot;Built on Ubuntu 10.04.4 LTS (Thu Feb 16 14:00:21 CST 2012)&quot;"/>
      <listOptionValue builtIn="false" value="FULL_VERSION=&quot;20.0-b12&quot;"/>
      <listOptionValue builtIn="false" value="GAMMA"/>
      <listOptionValue builtIn="false" value="HOTSPOT_BUILD_TARGET=&quot;product&quot;"/>
      <listOptionValue builtIn="false" value="HOTSPOT_BUILD_USER=&quot;jack&quot;"/>
      <listOptionValue builtIn="false" value="HOTSPOT_LIB_ARCH=&quot;i386&quot;"/>
      <listOptionValue builtIn="false" value="HOTSPOT_RELEASE_VERSION=&quot;20.0-b12&quot;"/>
      <listOptionValue builtIn="false" value="HOTSPOT_VM_DISTRO=&quot;OpenJDK&quot;"/>
      <listOptionValue builtIn="false" value="IA32"/>
      <listOptionValue builtIn="false" value="JDK_MAJOR_VERSION=&quot;1&quot;"/>
      <listOptionValue builtIn="false" value="JDK_MINOR_VERSION=&quot;6&quot;"/>
      <listOptionValue builtIn="false" value="JRE_RELEASE_VERSION=&quot;1.6.0_24-b24&quot;"/>
      <listOptionValue builtIn="false" value="LAUNCHER_TYPE=&quot;gamma&quot;"/>
      <listOptionValue builtIn="false" value="LINK_INTO_LIBJVM"/>
      <listOptionValue builtIn="false" value="LINUX"/>
      <listOptionValue builtIn="false" value="PRODUCT"/>
      <listOptionValue builtIn="false" value="TARGET_ARCH_MODEL_zero"/>
      <listOptionValue builtIn="false" value="TARGET_ARCH_zero"/>
      <listOptionValue builtIn="false" value="TARGET_COMPILER_gcc"/>
      <listOptionValue builtIn="false" value="TARGET_OS_ARCH_MODEL_linux_zero"/>
      <listOptionValue builtIn="false" value="TARGET_OS_ARCH_linux_zero"/>
      <listOptionValue builtIn="false" value="TARGET_OS_FAMILY_linux"/>
      <listOptionValue builtIn="false" value="ZERO"/>
      <listOptionValue builtIn="false" value="ZERO_LIBARCH=&quot;i386&quot;"/>
      <listOptionValue builtIn="false" value="_GNU_SOURCE"/>
      <listOptionValue builtIn="false" value="_REENTRANT"/>
      <listOptionValue builtIn="false" value="DEBUG_PRINT_METHOD"/>
        
    3. include path部分好像cdt会自动添加,如果需要没添加的,手工添加进去即可。
  4. 新建一个run configuration,
    1. Main tab > c/c++ Application = icedtea6/openjdk.build-ecj/hotspot/outputdir/linux_i486_zero/product/gamma
    2. disable auto build
    3. argument = -cp classic_hello_world foo.Hello -Djava.compiler=NONE,或者写你要执行的任何java类
    4. 添加环境变量,LD_LIBRARY_PATH=${YourIcedtea6}/openjdk.build-ecj/hotspot/outputdir/linux_i486_zero/product
  5. 大功告成,此时项目能有代码提示,请随意设置断点调试jvm。

最后上图,图中断点处正是主循环main_loop,"解释那些字节码"



 

  • 大小: 228.7 KB
分享到:
评论

相关推荐

    .gradle 仓库 file-2.1

    综上所述,`.gradle` 仓库和其中的 `files-2.1` 目录是 Gradle 构建过程中至关重要的部分,它们涉及到了依赖管理、性能优化、问题排查等多个方面,理解并合理利用这些缓存可以极大地提升开发效率。

    esapi-2.1.0.1_esapi-2.1.0.1_

    **ESAPI 2.1.0.1:安全编程接口详解** `ESAPI`,全称为`Enterprise Security API`,是企业级安全API的一种实现,主要用于帮助开发人员在Java平台上构建更安全的应用程序。这个开源项目由OWASP(开放网络应用安全...

    深入JVM系列-JIT编译详解1

    在这篇文章中,我们将深入探讨JVM中的JIT编译技术。JIT(Just In Time)编译器是一种即时编译技术,它可以加速Java程序的执行速度。 JIT编译过程 -------- 在执行Java程序时,JVM会将字节码编译成本机机器码,并...

    openjdk-8-jdk.zip

    1. **切换到旧版本的软件源**:Ubuntu和Debian提供了长期支持(LTS)版本的旧版软件源,用户可以修改`/etc/apt/sources.list`文件,将仓库地址更改为包含OpenJDK 8的旧版本源。 2. **使用第三方存储库**:有些第三...

    asm-attrs-2.1.jar.zip

    标题中的"asm-attrs-2.1.jar.zip"是一个压缩包文件,其主要包含的是一个名为"asm-attrs-2.1.jar"的Java可执行jar文件和一个"asm-2.2.1.jar.license.txt"的文本文件。这个jar文件很可能是ASM库的一个特定版本,ASM是...

    byteman-2.1.4.1-3.el7.x64-86.rpm.tar.gz

    byteman-2.1.4.1-3.el7.x64-86.rpm.tar.gz 是一个 RPM 格式的软件包压缩文件,其中包含了 byteman 工具的特定版本安装文件和相关依赖包。Byteman 是一个用于监控和测试 Java 应用程序的开源工具,它可以插入字节码到...

    openjdk-17.0.2(openjdk-17.0.2_linux-x64_bin.tar.gz)

    这个版本的OpenJDK专为Linux x64(64位)操作系统设计,提供了Java开发和运行环境,包括Java虚拟机(JVM)、Java类库以及相关的工具。 OpenJDK 17.0.2是Java 17的一个更新版本,带来了若干性能改进、安全修复和新的...

    java-8-openjdk-amd64 资源包下载和解包方法.

    OpenJDK 是一个开源版本的 JDK,由 Oracle 公司主导并维护,它遵循GNU General Public License(GPL)版本2许可协议。在本案例中,我们关注的是OpenJDK 8的AMD64架构版本,这是一个适用于64位系统的版本。 "java-8-...

    openjdk-17.0.2(openjdk-17.0.2_macos-aarch64_bin.tar.gz)

    OpenJDK 17.0.2 是一个开源的 Java 开发工具包,它实现了 Java 虚拟机(JVM)和 Java 类库,是 Java 开发的重要基础。这个版本特别针对 macOS 系统的 aarch64 架构进行了优化,这意味着它可以无缝地在基于 Apple M1 ...

    scala-intellij-bin-2.1.0.15.1.zip

    3. **设置与安装**:下载并解压"scala-intellij-bin-2.1.0.15.1.zip"后,用户需要在IntelliJ IDEA中导入或安装这个插件。这通常通过IDE的“Preferences”或“Settings” -&gt; “Plugins” -&gt; “Install plugin from ...

    编译调试jvm, openjdk8源码, openjdk7, make3.81源码

    在IT领域,特别是Java开发中,理解JVM(Java虚拟机)的工作原理并能对其进行编译和调试是一项高级技能。本资源包包含了与这个主题相关的关键元素:OpenJDK8和OpenJDK7的源码,以及make 3.81的源码,这些都是构建和...

    rxtx-2.1-7-bins-r2

    标题中的“rxtx-2.1-7-bins-r2”是指RXTX库的一个特定版本,这是Java中用于串行通信的重要开源项目。RXTX库为Java应用程序提供了与串行端口(COM端口)交互的能力,使得开发者能够在不同的操作系统上实现串行数据...

    java-1.8.0_222-openjdk-amd64.tgz

    此文件很可能是OpenJDK的开源实现,OpenJDK是Java SE(标准版)的一个免费和开放源代码实现。 描述中提到,“linux ubuntu center-os open jdk1.8 直接放在/usr/lib/jvm/目录解压,export导入到环境变量即可”,这...

    java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7-8.aarch64.tar.gz

    基于arm64架构CentOS 7.9.2009 (AltArch)版本系统 ...打包/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.aarch64 openEuler 20.04 LTS安装GConf2-devel后,可启动apache-tomcat-8.5.91

    aspectwerkz-jdk14-2.1.R.jar.zip

    首先,`aspectwerkz-jdk14-2.1.R.jar`是AspectWerkz的库文件,包含了实现AOP功能所需的类和方法。这个`.jar`文件是Java的归档文件,用于打包和分发Java类库。用户可以将这个`.jar`文件添加到项目的类路径中,以便在...

    windows版本的graalvm-community-openjdk-23.0.1+11.1

    在本文中提到的“windows版本的graalvm-community-openjdk-23.0.1+11.1”指的是GraalVM的社区版,它与OpenJDK 23.0.1版本结合的版本。OpenJDK是Java开发平台的一个开源版本,提供了一个自由的Java运行环境。GraalVM...

    java-11-openjdk-11.0.8.10-1.windows.ojdkbuild.x86_64.zip

    OpenJDK是Java平台标准版(Java SE)的一个开源实现,由Oracle公司发起并维护,旨在提供Java编程环境。此版本号11.0.8.10-1表明这是OpenJDK 11的一个更新,包含了性能改进和安全修复。 Java JDK是开发和运行Java...

    JVM基础-超清文字版.pdf

    通过学习《JVM基础-超清文字版.pdf》,开发者可以更好地理解JVM的工作原理,从而编写出更高效、更稳定的Java程序。了解JVM的细节对于进行性能调优、排查问题以及优化大型Java应用具有重要意义。

    openjdk-17.0.2(openjdk-17.0.2_linux-aarch64_bin.tar.gz)

    5. **性能提升**:OpenJDK团队致力于提升Java运行时的性能,包括编译优化、内存分配优化等,使得Java应用程序能够更快更高效地运行。 总的来说,OpenJDK 17.0.2对于Linux aarch64用户来说是一个可靠的选择,它提供...

    java-1.8.0-openjdk

    OpenJDK 由 OpenJDK 社区开发并维护,旨在提供一个符合 Java SE 标准的开放源代码实现,允许开发者在各种操作系统上编写、编译和运行 Java 应用程序。这个特定的版本是 "1.8.0.292-2.b10.dev.redhat",表明它基于 ...

Global site tag (gtag.js) - Google Analytics