服務端:
普通的jar項目
jdk1.7之后使用命令:
java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y -jar test-remove-debug.jar
jdwp:是 Java Debug Wire Protocol的縮寫
server=y表示是監聽其他debugclient端的請求
address=8000表示服務會在端口號8000監聽debug請求,客戶端必須設置這個端口號才能進行dubug
suspend表示是否在調試客戶端建立連接之后啟動 VM。如果為y,那么當前的VM就是suspend直到有debug client連接進來才開始執行程序。如果你的程序不是服務器監聽模式並且很快就執行完畢的,那么可以選擇在y來阻塞它的啟動,當然如果是服務器監聽模式設置為n;
放在tomcat下面的web項目
1) : 編輯 bin 目錄下 catalina.sh 如果是 windos 系統 請編輯catalina.bat 。
首先找到 文件中JPDA_ADDRESS 。 ip地址要改成本地局域網IP。端口隨意改成一個可用的。
2):關閉tomcat (如果已經啟動的話)
3) : 啟動tomcat (關鍵)
啟動tomcat的時候不能再用./startup.sh 這個命令了。而是用下面的
1
|
./catalina.sh jpda start
|
4) :如果啟動成功tomcat 配置就完成了
客戶端:
eclipase:
設置 Debug configurations-->Remote Java Application
注意在點擊【Debug】按鈕之前,一定不要多次“啟動本地程序”,否則就會出現"Failed to connect to remote VM. Connection refused"異常,如下圖所示:
3. 調試遠程客戶端
點擊【Debug configurations】中的debug按鈕,運行效果如下,接下來,就和本地調試一模一樣了。在調試過程中,日志打印在遠程服務器,本地console中看不到日志信息。如果是項目為web項目,調試的時候需要一個Http客戶端發起請求,比如postman等等。
條件斷點
如果需要對循環中的數據進行調試,使用條件斷點是個不錯的選擇。將斷點設置在指定的位置上,右鍵進一步設置斷點屬性,如下:
調試時,程序會中斷在符合條件的代碼處。
異常斷點
斷點不僅可以設置在某一行,也可以針對整個工程進行設置。假設你知道程序會在某個地方拋出NullPointerException,可是並不是每一次運行都會出現,就可以為工程設置異常斷點,如下:
idea客戶端
- 1.在Host中填寫遠程ip,在Port中填寫debug的端口。
- 2.設置遠程jar包對應的本地源碼項目
同樣的。如果是項目為web項目,調試的時候需要一個Http客戶端發起請求,比如postman等等。
備注:
備注轉自如下四篇篇博文,稍作修改。
https://blog.51cto.com/204222/2115352
https://www.cnblogs.com/jianliang-Wu/p/7110681.html
https://www.cnblogs.com/east7/p/10285955.html
https://blog.csdn.net/tengdazhang770960436/article/details/85254026