本地安装GDB
1 | brew install gdb |
除了这个,在Mac系统系统里面还要配置证书相关的操作。
按入下步骤创建代码签名的证书:
- 打开 Keychain Access 应用程序(/Applications/Utilities/Keychain Access.app)
- 执行菜单 钥匙串访问 -> 证书助理 -> 创建证书
- 填写如下信息:
- 名称:gdb_codesign
- 身份类型:自签名根证书
- 证书类型:代码签名
- 钩选:让我覆盖这些默认设置
- 一路确定,直到指定证书位置的步骤,选择系统
- 点击“创建”,会提示用输入系统登录密码,创建完成
- 在钥匙串访问程序中,选择左侧栏的系统和我的证书,找到你刚刚创建的gdb_codesign证书并双击打开证书信息窗口,展开信任项,设置使用此证书时:为始终信任。
- 关闭证书信息窗口,系统会再次要求输入系统登录密码。
因为我现在的系统是MacOS Catania,是在 Mojave (10.14) 之后的系统。所以还需要创建一个配置文件gdb-entitlement.xml
,其内容如下:
1 |
|
最后执行命令:
1 | ➜ Desktop codesign --entitlements gdb-entitlement.xml -fs gdb_codesign $(which gdb) |
终端中 gdb 断点进入源码调试 hotspot
编译class
1 | # 在我的桌面创建一个Test.java文件 |
找到我对应的openjdk8的build地址
1 | /Users/chenyuan/Workspaces/Openjdk/openjdk8/build/macosx-x86_64-normal-server-release/jdk |
利用javac
、java
命令运行Test.java文件
1 | ➜ Desktop /Users/chenyuan/Workspaces/Openjdk/openjdk8/build/macosx-x86_64-normal-server-release/jdk/bin/javac Test.java |
gdb测试
1 | ➜ Desktop gdb --args /Users/chenyuan/Workspaces/Openjdk/openjdk8/build/macosx-x86_64-normal-server-release/jdk/bin/java Test |
我在这里发现l这里查看代码跟我debug的地方并不同,我就看看日志发现日志中当时有一个提示:No source file named init.cpp.
然后又找了一翻文章,找到这个时候当时编译的时候没有添加g参数。详细请看:https://blog.csdn.net/wenceng9/article/details/21372265 (我是在不想再重新编译一次了,因为想早点睡觉。哈哈~)
Clion中调试不香吗?
打开 clion,选择 File->ImportProject
,选择到 /Users/chenyuan/Workspaces/Openjdk/openjdk8/hotspot
作为 jvm 源码的根目录,这里导入的过程无脑点击 next
即可
对于可能遇到的头文件不包含问题,解决如下:
clion 导入源码之后遇到头文件找不到的问题,而实际上这些头文件在源码里面是存在的,只不过在某些源文件里面是以相对路径的方式来搜索,可以在 CMakeLists.txt
里面添加一些根路径。
1 | include_directories(./src/share/vm) |
另外,如果某些头文件依然找不到,可以手工导入,然后把导入的头文件加到hotspot/src/share/vm/precompiled/precompiled.hpp
里,因为大多数源文件都会包含这个源文件
1 |
进入如下界面,添加 Application:openjdk8
,Execuable
中选择/Users/chenyuan/Workspaces/Openjdk/openjdk8/build/macosx-x86_64-normal-server-release/jdk/bin
配置完成后,就可以执行openjdk8了。
参考地址
- https://segmentfault.com/q/1010000004136334
- https://rqsir.github.io/2019/04/19/openjdk-8-使用Clion调试源码/
如果大家喜欢我的文章,可以关注个人订阅号。欢迎随时留言、交流。如果想加入微信群的话一起讨论的话,请加管理员简栈文化-小助手(lastpass4u),他会拉你们进群。