簡介
本篇博客介紹一下在Intellij IDEA下對Springboot類型的項目的遠程調試功能。所謂的遠程調試就是服務端程序運行在一台遠程服務器上,我們可以在本地服務端的代碼(前提是本地的代碼必須和遠程服務器運行的代碼一致)中設置斷點,每當有請求到遠程服務器時時能夠在本地知道遠程服務端的此時的內部狀態。
方法
首先,打開Edit configurations,點擊+號,創建一個Remote應用。
填寫name,配置Host地址(遠程服務器地址)和端口(選一個未被占用的端口)。然后復制For JDK1.4.x下面的參數,示例配置的端口為5005
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
經過以上步驟,已經獲得了啟動遠程服務器的參數。在啟動springboot時默認使用java命令來啟動.
比如,示例項目啟動命令為:
$ java -jar remotedebug-0.0.1-SNAPSHOT.jar
那么此時在啟動命令上添加上面獲得的參數(非springbboot項目,就是把多的那段配置添加到相應的環境變量即可):
$ java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 remotedebug-0.0.1-SNAPSHOT.jar
這樣服務端就監聽在5005端口了。可以通過以下命令來檢查是否監聽成功:
netstat -anp | grep 5005
docker
如果應用是跑在容器中的,只需要修改Dockerfile即可。例子如下
FROM java:8
COPY target/agents.jar /app.jar
EXPOSE 8080
EXPOSE 5005
ENTRYPOINT ["java","-jar" ,"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005","-Dspring.profiles.active=sit","/app.jar"]
通過以上步驟已經完成了服務器端參數的添加。下面啟動剛才配置的Remote服務。在啟動時候我們會發現此項啟動程序只有debug啟動模式。
啟動完成,對需要debug的代碼打上斷點,剩下的操作步驟就是訪問遠程服務器對應的業務請求,本地就會同步debug。其余的操作與本地debug相同,此處就不再贅述了。