Centos7.7下调试hotspot的eclipse与gcc环境搭建
关于clion的环境可参考,虽然他是mac系统,但与centos操作差不多。https://blog.csdn.net/wd2014610/article/details/81703203
先配置好C语言的环境变量,比如我的是:
export C_INCLUDE_PATH=/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/:/usr/local/include:/usr/include/gnu/:/usr/include/
export CPLUS_INCLUDE_PATH=/usr/include/c++/4.8.5:/usr/include/c++/4.8.5/x86_64-redhat-linux/:/usr/include/c++/4.8.5/backward/:/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/:/usr/local/include/:/usr/include/gnu/:/usr/include/
把上面的代码放到/etc/profile, source通过生效一下。
1.安装cmake,以便生成eclipse的makefile工具。yum install cmake
我安装好后的版本是cmake version 2.8.12.2 。看eclipse也可以创建cmake的工程,但多次尝试均未能正常编译,原因未知。
2.复制openjdk10 src文件夹下的hotspot文件夹到某目录下。进入hotspot目录,执行如下2命令:
touch CMakeLists.txt
cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE=debug
3.打开eclipse,选择菜单File → New →other -→C/C++ →Makefile Project with
在Code Location输入框选择刚才的hotspot文件夹。工程名自动生成为hotspot。
工程结构如下:
然后配置hotspot项目的Debug Config,比较关键:
第一页注意两处:
C/C++ Application选择前面文中debug模式编译好的jdk下的bin/java可执行文件,
下面选Disable to build
第二页是参数(Arguments), 就录入个-version。(查java版本,简单)
第四页是Debugger, 已经安装好了gdb,这里就是gdb。但要注意.gdbinit文件的内容是:
handle SIGSEGV nostop noprint pass
第五页是Source,这里需要把源码加进来。
Add→Project -Path Relative to Source Pold ->刚建的hotspot项目如下图:
最后为了检验我们确实搭好了调试环境,打个断点试试。eclipse下打开thread.cpp为文件,搜索::create_vm,在 3643行加个断点。最后debug,就可以看到效果了:
这里相当于在控制台执行了java -version
如果我们要执行我们自己的java程序,怎么做呢?
先在一个java eclipse建一个普通的java工程,写一个测试程序。
package test; public class Test { public static void main(String[] args) { Integer n=3; System.out.println(n); n=10; System.out.println(n); } }我们再进入这个工程所在文件夹下的bin目录 ,把下面的文件复制到c eclipse的hotspot工程下,这样hotspot工程就可以找到我们的Test.java了。
把Debug配置页里的Arguments改成test.Test ,再debug,是不是就能看到Test的执行结果了?