CLOVER🍀

That was when it all began.

IntelliJでローカルプロセスにアタッチ/リモートデバッグする

あんまり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です。


リモートデバッグする

メニューの「Run」→「Edit Configurations...」を選択して、「Remote」の設定を追加します。

ホストなどを合わせて(今回はそのままですが)、OKを押すとRemote用の設定が追加されます。

あとはこのタスクをデバッグ実行すると、先ほどローカルプロセスにアタッチしたようにリモートでバッグが可能になります。

デバッグした時の画面は同じなので、割愛。

便利ですね、覚えておきましょう。

参考)
How to Remotely Debug Application Running on Tomcat From Within Intellij IDEA « Trifork Blog / Trifork: Enterprise Java, Open Source, software solutions