远程debug
首先,配置remote:
如上圖所示,點(diǎn)擊Edit Configurations,進(jìn)入如下界面:
如上圖所示,我們進(jìn)入了Run/Debug Configurations界面,然后點(diǎn)擊左上角的+,選擇Remote:
標(biāo)注 1:運(yùn)行遠(yuǎn)程 JVM 的命令行參數(shù);
標(biāo)注 2:傳輸方式,默認(rèn)為Socket;
標(biāo)注 3:調(diào)試模式,默認(rèn)為Attach;
標(biāo)注 4:服務(wù)器 IP 地址,默認(rèn)為localhost,需要修改為目標(biāo)服務(wù)器的真實(shí) IP 地址;
標(biāo)注 5:服務(wù)器端口號(hào),默認(rèn)為5005,需要修改為目標(biāo)服務(wù)器的真實(shí)端口號(hào);
標(biāo)注 6:搜索資源是使用的環(huán)境變量,默認(rèn)為,即整個(gè)項(xiàng)目。
如上圖所示,其中 標(biāo)注 2 和 標(biāo)注 3 又分別有兩種分類(lèi),對(duì)于 標(biāo)注 2,
標(biāo)注 2:傳輸方式,默認(rèn)為Socket;
Socket:macOS 及 Linux 系統(tǒng)使用此種傳輸方式;
Shared memory: Windows 系統(tǒng)使用此種傳輸方式。
對(duì)于 標(biāo)注 3,
標(biāo)注 3:調(diào)試模式,默認(rèn)為Attach;
Attach:此種模式下,調(diào)試服務(wù)端(被調(diào)試遠(yuǎn)程運(yùn)行的機(jī)器)啟動(dòng)一個(gè)端口等待我們(調(diào)試客戶(hù)端)去連接;
Listen: 此種模式下,是我們(調(diào)試客戶(hù)端)去監(jiān)聽(tīng)一個(gè)端口,當(dāng)調(diào)試服務(wù)端準(zhǔn)備好了,就會(huì)進(jìn)行連接。
然后,復(fù)制 標(biāo)注 1,即 IntelliJ IDEA 自動(dòng)生產(chǎn)的命令行參數(shù),然后導(dǎo)入到 Tomcat 的配置文件中。以 Linux 系統(tǒng)為例,導(dǎo)入語(yǔ)句為:
export JAVA_OPTS='-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8001'
如果是 Windows 系統(tǒng),則導(dǎo)入語(yǔ)句為:
set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8001
兩者的區(qū)別在于導(dǎo)入語(yǔ)句的關(guān)鍵字不同以及有無(wú)引號(hào),Linux 系統(tǒng)的導(dǎo)入關(guān)鍵字為export,Windows 為set;Linux 的導(dǎo)入值需要用單引號(hào)''括起來(lái),而 Windows 則不用。
接下來(lái),修改 Tomcat 的 bin 目錄下的catalina.sh文件(如果是 Windows 系統(tǒng)則修改catalina.bat文件),將上述的導(dǎo)入語(yǔ)句添加到此文件中即可:
至此,IntelliJ IDEA 遠(yuǎn)程調(diào)試 Tomcat 的配置已經(jīng)完成了,調(diào)試的后續(xù)步驟按正常的調(diào)試技巧進(jìn)行就可以啦!
+++++ 題外話(huà):我是一個(gè)大彩蛋 +++++
在這里,我們假設(shè)服務(wù)器的 IP 地址為10.11.12.39,端口號(hào)為16203,設(shè)置完成后,進(jìn)入Debug模式,如果連接成功,則會(huì)出現(xiàn)如下提示:
此外,如果我們是跨多個(gè)系統(tǒng)進(jìn)行調(diào)試,則只需要在想要調(diào)試的系統(tǒng)中配置Remote,打上斷點(diǎn),啟動(dòng)Debug模式,然后在服務(wù)開(kāi)始的地方執(zhí)行程序即可進(jìn)入到我們?cè)O(shè)置的斷點(diǎn)。而且,如果我們?cè)诒镜嘏渲肦emote并關(guān)聯(lián)到某個(gè) Tomcat,在Debug模式下,所有涉及到斷點(diǎn)所在代碼的功能,都會(huì)進(jìn)入我們?cè)O(shè)置的斷點(diǎn)。
例如,對(duì)于服務(wù)器上的 Tomcat A,多個(gè)系統(tǒng)都用到了這個(gè) Tomcat,如訂單子系統(tǒng)、賬戶(hù)子系統(tǒng)、路由子系統(tǒng)等,并且多個(gè)系統(tǒng)間互相調(diào)用,如訂單子系統(tǒng)調(diào)了賬戶(hù)子系統(tǒng),賬戶(hù)子系統(tǒng)又調(diào)了路由子系統(tǒng),則當(dāng)我們?cè)谶@三個(gè)子系統(tǒng)中配置Remote并在對(duì)應(yīng)的代碼(如在訂單子系統(tǒng)中查詢(xún)商戶(hù)的賬戶(hù)信息,則調(diào)到賬戶(hù)子系統(tǒng);在賬戶(hù)子系統(tǒng)中又通過(guò)路由子系統(tǒng)調(diào)到其他底層服務(wù)查詢(xún)商戶(hù)的賬戶(hù)余額等)上打上斷點(diǎn),啟動(dòng)Debug模式之后,通過(guò)單元測(cè)試或者頁(yè)面操作觸發(fā)訂單子系統(tǒng)中的查詢(xún)商戶(hù)的賬戶(hù)信息功能,則會(huì)依次進(jìn)入到在上述三個(gè)子系統(tǒng)中設(shè)置的斷點(diǎn)。
此外,在我們配置完遠(yuǎn)程調(diào)試之后,就算別人啟動(dòng)相關(guān)服務(wù),也會(huì)進(jìn)入到我們的斷點(diǎn),而且會(huì)受到我們?cè)O(shè)置的斷點(diǎn)的影響,只有在我們執(zhí)行完測(cè)試之后,服務(wù)才會(huì)繼續(xù)執(zhí)行下去。最后,遠(yuǎn)程調(diào)試的功能真的很強(qiáng)大,善用遠(yuǎn)程調(diào)試,遠(yuǎn)離 Bug
總結(jié)
- 上一篇: 几种string格式化输出的方式
- 下一篇: 将一个简单远程调用的方式例子改为异步调用