0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

IntelliJ IDEA 2020.3 にしたら Gradle から呼び出していた Spring Boot のカスタム bootRun で起動したJavaアプリケーションがデバッグできなくなった

Posted at

先日 IntelliJ IDEA 2020.3 がリリースされたので、何も考えずにアップグレードして使用していた。

開発中のプロジェクトはSpring BootでWebFluxを利用しているJavaプロジェクトだったが、
意図しない挙動をしている部分があったのでブレークポイントを仕掛けてデバッグを開始した。

しかし、不具合と思われる箇所が呼び出しされるはずのAPIを何度呼び出してもブレークポイントにヒットしない。

最初はAPI自体が呼び出しされていないのかと思ったが、呼び出しされた時だけに出力されるログは出力されている。

どうやら一部のGradleタスクから実行されたJavaプロセスがデバッグでプロセスは起動するが、
デバッガーがプロセスにアタッチされていない様だった。

GradleのJavaExecなどのタスクを直接実行するタスクだとデバッガーがアタッチされるが、
別のGradleタスクからJavaプロセスを呼び出すタスクを呼び出しした時にデバッガーがアタッチされない様だった。

今回ブレークポイントがヒットしなかったのはbootRunDevというカスタムタスクだった。
このタスクはorg.springframework.bootプラグインのbootRunタスクに渡すJVMオプションを変数に追加して、
finalizedby経由でbootRunタスクを開始するというものだった。

問題はbootRunDevタスクから起動したJavaアプリケーションは先日までデバッグできていたこと、
そしてJunit Jupiterのテストをデバッグ実行した時はブレークポイントで停止するということだった。

IntelliJ IDEAのバージョンアップでGradle経由でJavaプロセスのデバッグ自体が出来なくなったわけではなさそうだった。

何時間が設定をいじった後で、デバッグ構成のGradleテンプレートを確認すると「Debug all tasks on the execution graph」という項目を発見した。

該当の設定にチェックを入れてbootRunDevタスクを実行するとブレークポイントがヒットするようになった。

no-titile.png

IntelliJ IDEA 2020.3 依然と設定が変わったのか不明だが、
とにかく該当の設定変更でデバッグは出来るようになった。

欠点はこの設定を有効化すると、Gradleタスク中に実行されるすべてのコードでブレークポイントが反応するようになる。

例えばbuildタスクの際に実行されるJunitテストコードに加えて、
テストコードから呼び出しされるライブラリやJDKのコードに仕掛けたブレークポイントもすべて反応するようになる。

とはいえ、開発中にデバッガーが動作しないという状況には代えられない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?