服務端啟動:
啟動jar包:
一般啟動:
java -jar -Dserver.port=8070 huishi-api.jar
遠程調試啟動:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 huishi-api.jar
address是項目啟動以后對外提供的調試端口
復雜的demo:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Xms4096m -Xmx4096m -Xmn512m -Xss256k -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof /data/dubbo/app/huishi-api.jar --server.port=8080 --dubbo.port=28080 --server.tomcat.basedir=/data/dubbo/cache/esmart-assign_8080 --log.home=/data/dubbo/logs/esmart-assign_8080 --log.level=info --log.stdout=0 --ecej.ops.port=80 --ecej.ops.iswitch=1 --jmx.rmi.port=18080
使用環境變量參數調試jar包:
設置環境變量
set CATALINA_OPTS= -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
然后可以直接命令行啟動tomcat即可。
如果是內嵌tomcat的話,上面的方法就不行
set JAVA_OPTS= -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
java -jar %JAVA_OPTS% huishi-api.jar
當然這樣有點作弊,因為跟上面的命令本質是一樣的。
環境變量只對tomcat/weblogic等Web服務器中間件有效,以“java -cp [*.jar] test.Main”方式運行的不會去讀取.
使用mvnDebug啟動SpringMVC項目:
mvnDebug -DskipTests tomcat7:run -Pirm-web -Pdev
可以查看maven安裝包內的bin內的mvnDebug.bat
@set MAVEN_DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
- Xdebug : 啟動debug模式
- Xrunjdwp:啟動調試協議JDWP,全稱是Java Debug Wire Protocol,它定義了JPDA front-end和JPDA back-end之間通訊信息的二進制格式。這里的通訊信息主要包括兩種:調試器發送給JVM的請求信息和JVM發送給調試器的調試信息。有如下子項:
- transport:JPDA front-end和back-end之間的傳輸方法。dt_socket表示使用套接字傳輸。
- server:y/n 該jvm是被調試者還是調試器
- suspend:y/n 是否等待外部調試器的連接,如jetty啟動時候,是否等待eclipse的遠程連接后在進行jetty的初始化工作。在調試web容器的時候用的很多
- address:監聽端口
使用mvn啟動:
設置MAVEN_DEBUG_OPTS環境變量
set MAVEN_DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
再使用maven插件spring-boot啟動時,可以用
mvn spring-boot:run -Dspring-boot.run.profiles=dev
使用Tomcat,非嵌入式啟動:
這里有多種方法可以做到,根據tomcat所運行的操作系統而有些微的不同。但是不管用哪種方法,這些配置的背后都做了同一件事:傳遞特定的啟動參數給 JVM,讓它啟用遠程調試(remote debugging)。
JVM 激活遠程調試的啟動參數有 JPDA_OPTS, CATALINA_OPTS 和 JAVA_OPTS。其中 JAVA_OPTS 是通常不建議使用的, 因為基於 JAVA_OPTS 的參數設定會暴露給所有的 JVM 應用, 而 CATALINA_OPTS 定義的設定值限制在Tomcat 內。
可以在~/bin/catalina.bat頭部寫入或者新建setenv.bat文件
在 setenv.bat 文件中寫入:
set CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=1043,server=y,suspend=n"
如果運行在Linux上, setenv.sh 中寫入:
export CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=1043,server=y,suspend=n"
當然上面的設置也可以直接放到 catalina.sh (catalina.bat )內,但是有個 setenv.* 額外的配置文件一直是最佳選擇, tomcat會自動讀取。
要注意的是, 有些人會碰到過用另一個配置方法來啟用遠程調試:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=1043,suspend=n
-Xdebug and -Xrunjdw 與我們上面推薦的設置不同之處在於, 它是一種舊方式,適用於JVM 小於 JAVA 5.0 的版本(包括5.0), 而 agentlib:jdwp適用於 JAVA 5.0 和以后版本。
最后通過下面的命令行啟動tomcat,即可完成tomcat啟用遠程調試啦。
startup.sh
或者
catalina.sh start
startup.bat
或者
catalina.bat start
如果是window服務的話,必須要在屬性中加啟動參數,不然的話,是沒有效果的。
客戶端設置:
IDEA設置:
CommandLine會根據右邊選擇jdk版本自動生成,直接復制到命令里面就可以
手動配置Host,Port即可。
VsCode設置:
遠程調試配置:
launch.json設置:
{
"type": "java",
"name": "Debug (Attach)",
"request": "attach",
"hostName": "localhost",
"port": 8000
}
在服務端啟動以后,啟動vs進行調試
服務端啟動,遠程調試一步到位:
.vscode/tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "myMavenDebugCommand",
"type": "shell",
"command": "mvnDebug spring-boot:run",
"group": "build"
}
]
}
launch.json
{
"type": "java",
"name": "Debug (Attach)",
"request": "attach",
"hostName": "localhost",
"port": 8008,
"preLaunchTask": "myMavenDebugCommand" // <--It will be executed first.
}