jvm虚拟机

Xcode debug Hotspot(一)——创建Xcode项

2018-12-05  本文已影响88人  flycash

概述

前面安装gdb调试hotspot里面,我记录了自己安装gdb调试hotspot的过程。后来我发现,使用gdb的时候,一般都是和eclipse结合在一起使用。而我作为一个有洁癖的开发,我实在不想自己的电脑上安装那么多东西,毕竟我已经安装了xcode和idea了。于是我尝试使用XCode来debug hotspot。

对于一些gdb大神来说,可能直接使用gdb命令行就可以了,根本不需要什么eclipse。可惜的是,我不是这种大神,我是一个gdb方面的小菜鸡,干不来那种事情……

幸运的是,网上也有一些使用XCode来debug Hotspot的博客(如OpenJDK9 Hotspot Mac OSX 编译和调试,我参考着试了一下,记录自己使用XCode来debug的过程。

编译JDK

编译JDK可以参考Mac上编译JDK安装gdb调试hotspot。尤其要注意的是,要编译成debug的版本

创建项目

准备空项目

首先打开Xcode创建一个Command Line Tool项目:


Command Line Tool项目 C++

创建的项目形如:


新项目

把原本的文件都删掉:


空项目

修改运行目标

首先调出schema窗口


Schema路径
build

删除这个build目标,毕竟我们已经构建好了:


删除后的build

而后修改运行目标:


运行目标
选择文件
修改后运行目标

修改为编译后的java命令路径,在我的机器上的路径是:
/Users/xxx/git/openjdk/build/macosx-x86_64-server-fastdebug/jdk/bin

导入源码

把hotspot的源码导入项目:


导入源码

选择hotspot目录(位于openjdk_root/src/hotpsot)下的所有文件和目录,点击确定:


选择HotSpot源码

开始debug

找到jni.cpp:


jni.cpp

找到JNI_CreateJavaVM方法,打上断点:


打断点

点击运行:


运行

出现了一个SIGSEGV错误:


SIGSEGV错误

在左下角的命令行里面执行命令:

process handle SIGSEGV --stop=false
修复bug

而后点击下一步,就会出现:


ojbk

到这一步,我们成功在Xcode里面debug hotspot了。

说到这里,我眼泪都下来了,想起了过往自己傻逼用gdb+eclipse的艰难历程。

左边的那一大堆线程

下图展示了一大堆的线程:


一大堆线程

这些线程我还是认识一些,我整理了一下这些线程和它们承担的主要工作,慎重看待,因为我也是连蒙带猜的:

其他的就不认识了。

我的公众号:


白玉京过客
上一篇 下一篇

猜你喜欢

热点阅读