あんまりRemote Debugというものをやったことがなかったのですが、ちょっと気になって試してみたのでメモ。
こちらの情報を参考しました。
debugging - Attach Intellij-IDEA debugger to a running java process - Stack Overflow
たとえば、サンプルとしてSpring MVCでSpring BootなアプリケーションのUber JARがあったとして、このアプリケーションを
SpringのServletのprocessRequestメソッドでブレークポイントを貼ることを考えてみます。
ここで、次のようなオプションを付与してアプリケーションを起動します。
$ java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar hello.jar
ポイントはここですね。
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
suspendをyにすると、アタッチされるまでアプリケーションが停止することになります。
それでは、この状態のアプリケーションにアタッチするまでをIntelliJを使って見ていきます。
準備
まずは、適当にIntelliJを開いた状態で、今回ブレークポイントを貼るorg.springframework.web.servlet.FrameworkServletを開き、
ブレークポイントを設定しておきます。
ローカルプロセスに直接アタッチする
ローカルプロセスに、いきなりアタッチすることができます。
メニューの「Run」→「Attach to Local Process...」を選択します。
すると、現在アタッチ可能なプロセスが見れます
これで、対象のプロセスを選択してあげれば、デバッグが可能になります。ブレークポイントを貼った部分を通るような処理を動かして
あげればOKです。