[TOC]html
服務端啓動:
啓動jar包:
通常啓動:java
java -jar -Dserver.port=8070 huishi-api.jar
遠程調試啓動:git
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 huishi-api.jar
address是項目啓動之後對外提供的調試端口github
複雜的demo:web
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包:
設置環境變量spring
set CATALINA_OPTS= -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
而後能夠直接命令行啓動tomcat便可。shell
若是是內嵌tomcat的話,上面的方法就不行json
set JAVA_OPTS= -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 java -jar %JAVA_OPTS% huishi-api.jar
固然這樣有點做弊,由於跟上面的命令本質是同樣的。api
環境變量只對tomcat/weblogic等Web服務器中間件有效,以「java -cp [*.jar] test.Main」方式運行的不會去讀取.tomcat
使用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. }