日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot 实用开发技巧————Eclipse 远程调试

發(fā)布時(shí)間:2025/3/12 javascript 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot 实用开发技巧————Eclipse 远程调试 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

引言

在之前的開發(fā)當(dāng)中,都會進(jìn)行本地項(xiàng)目啟動(dòng),然后向本地服務(wù)發(fā)起請求來進(jìn)行 Debug 調(diào)試代碼,這也是開發(fā)人員最常見的調(diào)試操作。但是當(dāng)項(xiàng)目逐漸成型,慢慢的將各個(gè)模塊部署到服務(wù)器后,調(diào)試的手段可能就僅僅剩下查看執(zhí)行日志了。然而和本地 Debug 代碼不同,通過日志排查問題是非常不方便的,你需要在特定的位置打印日志預(yù)測問題可能出現(xiàn)的原因,無法精確、快速的定位問題。

為了解決這個(gè)問題,JVM 提供了遠(yuǎn)程調(diào)試的手段。我們在Linux 服務(wù)器上啟動(dòng)項(xiàng)目的時(shí)候,為其指定一系列jvm 參數(shù),就可以讓java 服務(wù)監(jiān)聽指定端口,并與本地代碼進(jìn)行 debug 通信,但一定要保證本地和服務(wù)器上的代碼要保持一致

另外,不是說遠(yuǎn)程 Debug 只能用Eclipse ,也并不是說項(xiàng)目類型必須是 Spring Boot 。遠(yuǎn)程調(diào)試的本質(zhì)是 JVM 之間的 Socket 通信,因此,只要是 Java 項(xiàng)目就都可以進(jìn)行類似的遠(yuǎn)程調(diào)試操作,只不過啟動(dòng)參數(shù)可能書寫的位置不同罷了,而且 IDEA 也是有類似遠(yuǎn)程調(diào)試的功能的,本篇博客的靈感就來自 IDEA 遠(yuǎn)程調(diào)試的視頻教程:《DEBUG技巧-遠(yuǎn)程調(diào)試》

一、項(xiàng)目啟動(dòng)參數(shù)

目前主流的 Spring Boot? 項(xiàng)目都是通過 jar 文件進(jìn)行啟動(dòng)的,例如這樣:

nohup java -jar demo.jar &

那么如果想進(jìn)行遠(yuǎn)程調(diào)試,啟動(dòng)參數(shù)就必須加上一些允許遠(yuǎn)程調(diào)試的配置參數(shù):

nohup java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -jar? demo.jar? &

其中:

-Xdebug 代表開啟debug 模式,允許遠(yuǎn)程debug 數(shù)據(jù)交互

-Xrunjdwp? 代表Java Debug Wire Protocol ,Java Debug 電報(bào)協(xié)議

transport=dt_socket? 表示以 Socket 方式進(jìn)行數(shù)據(jù)傳輸

server=y? 表示啟動(dòng)的虛擬機(jī)是調(diào)試的服務(wù)器端

suspend=n? 表示不掛起虛擬機(jī),默認(rèn)是 y ,本參數(shù)表示在客戶端建立連接前,服務(wù)端是否掛起。n 代表不掛起,即不論我們的客戶機(jī)是否進(jìn)行debug 連接都不必等待直接啟動(dòng)。

address=8000 表示服務(wù)端監(jiān)聽的客戶機(jī)?debug 端口

可以看到,即便是最必要的遠(yuǎn)程調(diào)試參數(shù)也是長長的一串,所以,建議將啟動(dòng)命令以Shell 腳本的方式存儲,如下所示:

app.sh 腳本文件:

?二、啟動(dòng)項(xiàng)目

執(zhí)行配置好遠(yuǎn)程 debug 參數(shù)的 java -jar 命令后,我們可以通過檢查網(wǎng)絡(luò)狀態(tài)來觀察對應(yīng)的端口監(jiān)聽情況:

使用命令 :

netstat -anp | grep java

目前我只有一個(gè) Java 項(xiàng)目在 CentOS 6 (ip :192.168.1.140)上運(yùn)行,可以看到兩個(gè)醒目的 LISTEN ,代表 8000端口和 8080 端口都已經(jīng)被 Java 進(jìn)程監(jiān)聽。注意,在設(shè)置debug 參數(shù)的時(shí)候我們設(shè)置 suspend=n,因此,此時(shí)如果不進(jìn)行 debug 調(diào)試的話,服務(wù)沒有掛起,因此不會有任何影響,依然可以正常工作。?

三、Eclipse 連接遠(yuǎn)程服務(wù)

啟動(dòng)好了服務(wù)器上的應(yīng)用程序,且8000 端口已經(jīng)被監(jiān)聽,那么我們只需要在 自己的本機(jī)配置遠(yuǎn)程調(diào)試 IP 和 端口 即可。注意,不論你使用的是不是 Eclipse ,都是有對應(yīng)的配置的。如果你的遠(yuǎn)程主機(jī)需要通過跳板機(jī)訪問,需要另外配置端口轉(zhuǎn)發(fā),在文末的注意事項(xiàng)中會提到。

打開 Debug Configuration:

右鍵彈出浮窗,選擇 New Configuration:

填寫必要的連接信息:

點(diǎn)擊 Apply ——> Debug,可以觀察到Eclipse 右下角的提示信息:

雖然這里的進(jìn)度條信息是 Launching ,但實(shí)際上并不代表啟動(dòng)遠(yuǎn)程服務(wù)的意思,而是代表啟動(dòng)本地的客戶機(jī)代碼并連接到服務(wù)端。連接成功后,Eclipse 界面不會有任何變化,也不會跳轉(zhuǎn)到 Debug 界面。接下來我們進(jìn)行一下驗(yàn)證。

四、遠(yuǎn)程調(diào)試驗(yàn)證

又到了驗(yàn)證環(huán)節(jié),剛剛有提到,連接成功后不會有任何提示和變化,那我們?nèi)绾沃朗欠襁B接成功了呢?

首先你可以試著再次連接,那么就會提示下面的彈框:

如果你是人生第一次進(jìn)行遠(yuǎn)程調(diào)試,很可能就被這個(gè)對話框唬住了,以為自己連接失敗了,我就是這么被騙了好半天。

彈出此對話框的原因是我們已經(jīng)連接成功了,因此,后面的其他連接都會提示拒絕。

如果將 Eclipse 切換到Debug 界面,可以看到“小紅燈” 和 Disconnect 按鈕都是紅色亮起的狀態(tài),這是第一個(gè)可以直觀驗(yàn)證連接成功的途徑:

第二個(gè)驗(yàn)證的途徑是返回遠(yuǎn)程服務(wù)器,再次查看網(wǎng)絡(luò)監(jiān)聽狀態(tài):

可以清晰的看到,8000 端口已經(jīng)由 LISTEN 變?yōu)榱?ESTABLISHED,由于我的Linux 是放在 VMware 虛擬機(jī)上,因此這里顯示的 192.168.1.1 是 NAT 的虛擬網(wǎng)卡,詳情可以參考我的《Linux進(jìn)階之路————CentOS網(wǎng)絡(luò)配置》?

第三個(gè)驗(yàn)證的途徑就是最終我們想要的效果。

我們打開瀏覽器,請求服務(wù)器的資源 url ,可以看到我們的本地 斷點(diǎn)成功攔截:

可以看到,我們通過瀏覽器訪問的服務(wù)器資源地址,被本地的斷點(diǎn)成功攔截到了請求。

五、注意事項(xiàng)和補(bǔ)充說明

?需要說明的是,服務(wù)器上的jar 文件代碼必須要和本地保持一致,否則可能出現(xiàn)調(diào)試混亂的情況。

如果服務(wù)器開啟了防火墻,那么需要將我們遠(yuǎn)程調(diào)試的 Debug 端口放行,具體做法可以參考我的《Linux實(shí)操———CentOS 6 安裝配置 Tomcat》第三節(jié),簡單來說就是修改?/etc/sysconfig/iptables 文件,照著 22 端口的樣子粘貼即可,然后重啟防火墻。

另外,還有一點(diǎn)需要說明的是,如果在企業(yè)中遠(yuǎn)程服務(wù)器無法直接通信,即可能需要跳板機(jī)或者堡壘機(jī)訪問,那么可以配置 Debug 端口的端口轉(zhuǎn)發(fā),可以思考類似的場景:本地的SQLyog 如何連接到受跳板機(jī)保護(hù)服務(wù)器上的MySQL,并參考我的《服務(wù)端開發(fā)——云服務(wù)器的端口轉(zhuǎn)發(fā)設(shè)置(SSH隧道)》

注意,遠(yuǎn)程Debug模式可以成功將訪問服務(wù)器的請求攔截到本地代碼的斷點(diǎn)上,此時(shí)本地和遠(yuǎn)程的代碼都處于暫停(同步執(zhí)行)的狀態(tài),即遠(yuǎn)程服務(wù)會等待開發(fā)者執(zhí)行 Debug 操作,如 Resume(F8)、Step Over(F6) 等。如果希望退出Debug,只需要點(diǎn)擊 Disconnect 按鈕斷開通信即可,點(diǎn)擊后,遠(yuǎn)程服務(wù)自動(dòng)向下繼續(xù)執(zhí)行。

注意,一定不要點(diǎn)擊Terminate按鈕,如果只是希望退出?Debug 而誤點(diǎn)了“小紅燈”那么遠(yuǎn)程服務(wù)也會被終止,需要再次重啟服務(wù)才能恢復(fù)。

其實(shí)只要斷開連接,遠(yuǎn)程服務(wù)和本地的Eclipse 不會產(chǎn)生任何通信,所有的斷點(diǎn)都不會生效。而一旦連接成功,那么所有本地Debug操作都會被傳送到遠(yuǎn)程服務(wù),因此,一定要謹(jǐn)慎操作,避免在不必要的時(shí)候使遠(yuǎn)程服務(wù)停滯或關(guān)閉!

遠(yuǎn)程Debug 可以反復(fù)斷開、重連。?

參考文章

《JDWP了解》

《微服務(wù)學(xué)習(xí)(一)-使用Springboot配合Eclipse遠(yuǎn)程調(diào)試》

《eclipse遠(yuǎn)程調(diào)試之springboot》

綜上,是關(guān)于遠(yuǎn)程調(diào)試的一些知識總結(jié),歡迎文末留言。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Spring Boot 实用开发技巧————Eclipse 远程调试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。