IDEA中debug Elasticsearch源码之环境搭建
Posted pilaf1990
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA中debug Elasticsearch源码之环境搭建相关的知识,希望对你有一定的参考价值。
准备合适版本的JDK
以Elasticsearch 7.17版本为例,在本地搭建debug环境的时候,需要jdk 16以上的版本,可以下载jdk 17的版本。Apple M1的用户,可以下载zulu jdk,下载链接https://www.azul.com/downloads/?package=jdk,Apple M1用户建议下载JDK FX的包,因为open jdk中缺少javafx的包,可以下载jdk fx的包,就不会存在这个问题了:
下载源码
源码地址https://github.com/elastic/elasticsearch
可以clone到本地再切换到要研究的版本分支上,或者选择好版本后直接下载zip包
在IDEA中打开源码
看到网上有的博客说在源码导入IDEA之前,在根目录下执行./gradlew idea
之后再导入,但是试了一下,发现es提示这是一种过时的做法,已经推荐直接用IDEA打开源码工程,在es工程的CONTRIBUTING.md文件中有说明:
步骤:
在IDEA中选择File>Open,选中build.gradle文件,然后点击Open as Project。
第一次在IDEA中打开会有点慢,需要下载各种依赖之类的,耐心等一会即可。
开始debug
参考https://lanffy.github.io/2019/04/08/Elasticsearch-Compile-Source-And-Debug这篇博客上说的,有两种debug方式,一种是直接在IDEA中debug源码,但是需要配置的东西有点多,另一种是通过命令行编译启动源码,然后利用IDEA的远程debug attach到本地启动的进程。笔者选择的是后一种。
-
步骤一:设置断点
在IDEA中的源码中打上断点,对感兴趣的地方打上断点,如:
-
步骤二:点击Debug按钮
先在IDEA中点击Debug按钮
笔者的Debug Elasticsearch配置是将工程导入到IDEA中自动就有的,不是人为配置的,配置信息如下:
如果读者的IDEA中没有自动生成debug配置,可以考虑手动配置试试,命令行参数如下
-agentlib:jdwp=transport=dt_socket,server=n,address=localhost:5007,suspend=y,onthrow=<FQ exception class name>,onuncaught=<y/n>
- 步骤三:命令行启动
在命令行中进入es的源码根目录,执行./gradlew run --debug-jvm
注意,一定要先在IDEA中点击debug按钮,否则直接执行./gradlew run --debug-jvm
命令会报错Process ‘command ‘./bin/elasticsearch-keystore’’ finished with non-zero exit value 2
启动起来后,会进入到IDEA中的断点:
至此,本地的debug环境搭建完成。后续可以在自己感兴趣的地方打上断点,通过请求本地的es rest接口,进行debug。
参考资料:
1.https://segmentfault.com/a/1190000019514233
2.https://lanffy.github.io/2019/04/08/Elasticsearch-Compile-Source-And-Debug
3.https://discuss.elastic.co/t/failing-to-run-on-intellij-in-debug-mode/227805/4
以上是关于IDEA中debug Elasticsearch源码之环境搭建的主要内容,如果未能解决你的问题,请参考以下文章