摘要:占用率太高,还出各种奇怪问题,转投调试安装下载源代码漫长等待,中间无数次中断安装安装可选如果要使用解释器,需要安装设置调试级别,设成可以提供更多的调试信息设置路径
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 libfficonfigure
# 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
新建一个 command line(命令行工具)工程,新建后删除 XCode 自动生成的代码
编辑 hotspot scheme首先去掉 IDE build 配置,因为我们无法(也不需要)在IDE中构建 hotspot,其次将运行目标修改为:
右击 hotspot 工程,选择 "add files to project" 添加
在 jni.cpp 的 JNI_CreateJavaVM 方法中设置断点, goooooo
如果出现 sigsegv 信号中断,可以在 lldb 中设置
(lldb) process handle SIGSEGV --stop=false
上图
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/65895.html
摘要:准备工作假设源代码目录为编译时启用了解释器参考编译和调试调用栈先在函数参考虚拟机入口中设断点,然后在的方法中设置断点通过宏获取当前,然后创建第个栈帧,然后进入解释执行字节码 准备工作 假设 openjdk 源代码目录为 jdk9dev 编译 openjdk 时启用了 zero 解释器(参考 OpenJDK9 Hotspot Mac OSX 编译和调试) 调用栈 先在 JavaMai...
摘要:假设源代码目录为函数函数在,它处理完命令行参数后跳转到函数处理命令行选项函数在,它调用加载这个就是编译的产出在系统下在使用加载动态库并获取函数入口地址在系统下在熟悉的同学,对下面的代码应该会感到很亲切创建对象,并将控制流跳转到呵呵,在 假设 openjdk 源代码目录为 jdk9dev main函数 main 函数在 jdk9dev/jdk/src/java.base/share/na...
摘要:前言语言可以精确控制对象内存分配,出于性能考虑框架系统程序基本都会自己造轮子开发各种内存管理模块也不例外,它通过和方法的访问级别以及重载和方法来管理虚拟机内部对象的内存内存管理相关的基类定义了几个基类来作为大部分对象的基类顾名思义,它们只能 前言 C++ 语言可以精确控制对象内存分配,出于性能考虑 C++ 框架 or 系统程序基本都会自己 造轮子 开发各种内存管理模块. hotspot...
摘要:前言网上各路大神总结过各种关于内部实现,看别人的文章总觉得不过瘾,所以有了这篇文章,尝试再扒一次的底裤数据结构在分析源代码之前需要了解相关概念,比如等,参考网络上各种解说或者之前系列文章,这里重点介绍一下,,每个在内部都有一个的对象与之对应 前言 网上各路大神总结过各种关于 hotspot jvm synchronized 内部实现,看别人的文章总觉得不过瘾,所以有了这篇文章,尝试再扒...
摘要:前言本文从类的方法的内部实现入手,分析多线程相关的数据结构类和原理类方法类的方法用于启动线程,方法内部调用了方法在源代码中搜索,可以看到对应函数在源代码中搜索函数核心代码计算线程堆栈大小创建对象初始化启动线程在创建时传入了一个函数指针, 前言 本文从 Java Thread 类的 start 方法的内部实现入手,分析 Hotspot JVM 多线程相关的数据结构(类)和原理 Threa...
阅读 2694·2023-04-25 17:58
阅读 2978·2021-11-15 11:38
阅读 2377·2021-11-02 14:48
阅读 1184·2021-08-25 09:40
阅读 1822·2019-08-30 15:53
阅读 1093·2019-08-30 15:52
阅读 1031·2019-08-30 13:55
阅读 2435·2019-08-29 15:21