起因
這幾天,我做的項目中需要使用第三方的 API,在第三方的 API 回調時,出現各種錯誤,需要遠程調試。之前做遠程調試的時候,我只會在代碼中輸出日志,記錄下來做分析處理,但這樣做既麻煩又費時,往往還不能准確定位問題,惡心至極。之前做 .NET 開發時用過 Remote Debug 這個功能,想想 Idea 這么牛逼,是不是也有這個功能,上網一查,還真有,共享出來,與諸君共勉。
服務端配置
首先,我們要讓要讓遠程服務器支持遠程調試功能,在項目啟動項上追加特定的 JVM 參數即可,參數如下:
- 晚於 JDK 1.4.X 版本
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=4001
- JDK 1.4.X 版本
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4001
- JDK 1.3.X 或早起版本
-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4001
大家根據不同的 JDK 版本使用不同的啟動參數即可。本人使用的是 Tomcat 7 + Java 7 ,在 catalina.bat(linux 環境設置 catalina.sh)中設置 JAVA_OPTS 節點即可,“address=4001” 中的 “4001”為調試端口,大家可以根據需求自行設置(友情提示:不要占用網站的端口,有可能會導致項目啟動報錯)。
IDE 配置
然后,配置一下客戶端就可以啦,Idea 的客戶端配置非常簡單在如下圖所示的位置:
點擊 Edit Configurations,即可進入 Run/Debug Configurations 界面:
點擊左上角的“+”標識,可以在下拉框中發現“Remote”選項,選擇確定后,出現右側區域,首先在HOST(標注2)框中配置需要調試的遠程服務器地址,然后在調試端口狂(標注3)中調試端口號(這里的端口號和服務器端的端口號保持一致,本示例中是“4001”),點擊 OK 即可。
調試步驟
最后,進入調試流程,整個項目的調試也非常簡單,點擊下圖中的 debug 按鈕,當 console 窗口中打印出 “Connected to the target VM, address: 127.0.0.1:4001', transport: 'socket'”即表示鏈接成功:
當然啦,也會有不順利的情況出現,如:
- 服務器端口限制,比如服務器屏蔽了“4001”端口,會導致遠程調試失敗;
- 本地代碼和遠程代碼不一致,也會導致遠程代碼調試失敗;
啟動成功后,你就可以像調試本地代碼一樣 Happy 的調試遠程代碼了。