https://blog.csdn.net/tengdazhang770960436/article/details/85254026
1.調試java程序
1.1.遠程程序啟動設置
java -jar 啟動參數 xxx.jar ,注意啟動參數位置(在-jar之后,要啟動的jar包之前),其中5005是遠程調試端口(注意遠程服務器要打開這個端口),示例如下:
java -jar -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5005 log4j-test-0.0.1-SNAPSHOT.jar
1.2.idea配置
- 1.在Host中填寫遠程ip,在Port中填寫debug的端口。
- 2.設置遠程jar包對應的本地源碼項目
1.3.啟動遠程的程序
-
java -jar -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5005 log4j-test-0.0.1-SNAPSHOT.jar
jar 包啟動后在日志中打印如下日志說明啟動成功:
Listening for transport dt_socket at address: 5005
-
1.4.啟動idea調試
方式2:
- https://blog.csdn.net/lvshow/article/details/82491785
-
在被調試的java程序啟動的時候設置虛擬機運行參數
例如
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=65532 -jar xxx.jar
-jar xxx.jar 是要啟動的可運行的jar包
如果jar包內的java代碼不像tomcat這種屬於一直在后台運行的程序則會出現剛啟動還沒來得及打開調試器程序就結束了
這時候需要設置suspend=y 即讓程序啟動后等待調試器debugger連接上65532這個監聽端口后再繼續運行
如果是調試tomcat 則只需要在tomcat啟動的時候傳入jpda參數即可
例如:
-
catalina jpda start
因為catalina腳本里判斷如果傳入上述參數則運行一下語句,如下
-
if not "%JPDA_OPTS%" == "" goto gotJpdaOpts set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND% :gotJpdaOpts
具體說明在catalina 腳本注釋里,如下
如果tomcat 是注冊為windows服務啟動的,則catalina.bat腳本不會被執行,所以在腳本設置虛擬機參數也不會生效
-
2.tomcat 遠程調試
2.1.tomcat配置
- 1.編輯 catalina.sh 文件
- 2.在文件的 # OS specific support. 位置添加如下配置
-
export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
- skywalking 的agent如何調試了
- 列如order應用使用了skywalking的agent,我們在啟動order應用的時候我們就攜帶上
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005這幾個參數說明order應用運行的時候開啟了遠程調試的功能
- 第二步:我們在idea或者eclipse中我們導入skywalking agent的源碼,這里一定要保證agent的源碼版本和order應用中使用的agent的代碼一致
- 接下來,在idea或者eclipse中開啟遠程調試的功能,填寫的ip為遠程的order應用的ip,端口為
address=5005中指定的端口,運行程以debug的方式運行
我們來看下面的這樣一個案例
我們啟動simple-jvm-agent-aop這個應用的時候,我們使用target-java.jar這個agent,並且我們開啟了遠程調試訪問的功能
- 接下來我們在idea中導入target-java.jar所在源碼,這里因為jvm-agent-aop就是agent所在的運行的進程和simple-jvm-agent-aop都是運行在本地的所以下面配置遠程的ip地址都是localhost,端口是5005,這樣我們就遠程調試了