资讯专栏INFORMATION COLUMN

OpenJDK9 Hotspot Mac OSX 编译和调试

zhichangterry / 2984人阅读

摘要:占用率太高,还出各种奇怪问题,转投调试安装下载源代码漫长等待,中间无数次中断安装安装可选如果要使用解释器,需要安装设置调试级别,设成可以提供更多的调试信息设置路径

Intellij CLion CPU 占用率太高,还出各种奇怪问题,转投 Xcode 调试 hotspot

安装 hg
# brew install hg 
下载 open jdk 9 源代码
# hg clone http://hg.openjdk.java.net/jdk9/dev

漫长等待,中间无数次中断

安装 freetype
# brew install freetype
安装 libffi(可选)

如果要使用 zero 解释器,需要安装 libffi

# brew install libffi
configure
# bash configure --with-debug-level=slowdebug 
--with-freetype=/usr/local/opt/freetype 
--disable-warnings-as-errors 
--with-jvm-features=zero 
--with-jvm-variants=zero 
--with-libffi=/usr/local/opt/libffi 
--with-libffi-include=/usr/local/Cellar/libffi/3.0.13/lib/libffi-3.0.13/include
--with-debug-level

设置调试级别,设成 slow debug 可以提供更多的调试信息

--with-free-type

设置 free type 路径

--disable-warnings-as-errors

忽略警告

--with-jvm-features

设置使用 c++ 实现的 zero 解释器,比基于模版的解释器更容易调试(如果汇编功力不够的话)

--with-jvm-variants

配合 --with-jvm-features 使用

--with-libffi

配合 --with-jvm-features 使用

--with-libffi-include

设置 libffi include 文件夹路径

make
# make

构建成功后:
jdk -> build/macosx-x86_64-normal-server-slowdebug/jdk
hotspot -> build/macosx-x86_64-normal-server-slowdebug/hotspot

Xcode 调试 新建 command line 工程

新建一个 command line(命令行工具)工程,新建后删除 XCode 自动生成的代码

编辑 hotspot scheme

首先去掉 IDE build 配置,因为我们无法(也不需要)在IDE中构建 hotspot,其次将运行目标修改为: /build/macosx-x86_64-normal-server-slowdebug/jdk/bin/java(在编译源代码阶段已经生成)

添加 hotspot src 到工程

右击 hotspot 工程,选择 "add files to project" 添加 /hotspot/src 到工程中

在 jni.cpp 的 JNI_CreateJavaVM 方法中设置断点, goooooo

如果出现 sigsegv 信号中断,可以在 lldb 中设置

(lldb) process handle SIGSEGV --stop=false

上图

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65895.html

相关文章

  • OpenJDK9 Hotspot:Zero 解释器 初探

    摘要:准备工作假设源代码目录为编译时启用了解释器参考编译和调试调用栈先在函数参考虚拟机入口中设断点,然后在的方法中设置断点通过宏获取当前,然后创建第个栈帧,然后进入解释执行字节码 准备工作 假设 openjdk 源代码目录为 jdk9dev 编译 openjdk 时启用了 zero 解释器(参考 OpenJDK9 Hotspot Mac OSX 编译和调试) 调用栈 先在 JavaMai...

    zhangqh 评论0 收藏0
  • OpenJDK9 Hotspot java 虚拟机入口

    摘要:假设源代码目录为函数函数在,它处理完命令行参数后跳转到函数处理命令行选项函数在,它调用加载这个就是编译的产出在系统下在使用加载动态库并获取函数入口地址在系统下在熟悉的同学,对下面的代码应该会感到很亲切创建对象,并将控制流跳转到呵呵,在 假设 openjdk 源代码目录为 jdk9dev main函数 main 函数在 jdk9dev/jdk/src/java.base/share/na...

    JaysonWang 评论0 收藏0
  • OpenJDK9 Hotspot 虚拟机内部对象内存管理

    摘要:前言语言可以精确控制对象内存分配,出于性能考虑框架系统程序基本都会自己造轮子开发各种内存管理模块也不例外,它通过和方法的访问级别以及重载和方法来管理虚拟机内部对象的内存内存管理相关的基类定义了几个基类来作为大部分对象的基类顾名思义,它们只能 前言 C++ 语言可以精确控制对象内存分配,出于性能考虑 C++ 框架 or 系统程序基本都会自己 造轮子 开发各种内存管理模块. hotspot...

    W_BinaryTree 评论0 收藏0
  • OpenJDK9 Hotspot : synchronized 浅析

    摘要:前言网上各路大神总结过各种关于内部实现,看别人的文章总觉得不过瘾,所以有了这篇文章,尝试再扒一次的底裤数据结构在分析源代码之前需要了解相关概念,比如等,参考网络上各种解说或者之前系列文章,这里重点介绍一下,,每个在内部都有一个的对象与之对应 前言 网上各路大神总结过各种关于 hotspot jvm synchronized 内部实现,看别人的文章总觉得不过瘾,所以有了这篇文章,尝试再扒...

    Amio 评论0 收藏0
  • OpenJDK9 Hotspot : Thread

    摘要:前言本文从类的方法的内部实现入手,分析多线程相关的数据结构类和原理类方法类的方法用于启动线程,方法内部调用了方法在源代码中搜索,可以看到对应函数在源代码中搜索函数核心代码计算线程堆栈大小创建对象初始化启动线程在创建时传入了一个函数指针, 前言 本文从 Java Thread 类的 start 方法的内部实现入手,分析 Hotspot JVM 多线程相关的数据结构(类)和原理 Threa...

    roundstones 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<