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源码之环境搭建的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearches 远程调试

idea debug调试怎么使用

在Intellij IDEA中使用Debug

IDEA debug断点调试技巧

idea多线程debug技巧

IDEA中 debug 工具的使用详解