使用IDEA進行遠程調試


前言

對於分布式系統的調試不知道大家有什么好的方法。對於我來說,在知道遠程調試這個方法之前就是在代碼中打各種log,然后重新部署,上線,調試,這樣比較費時,有什么更好的辦法呢?

有時候,本地調試的時候沒有問題,打包部署到測試環境的時候卻爆出一堆莫名其妙的問題,這時該怎么辦呢?

偶然間了解到的遠程調試的功能簡直是一把利器,能夠非常好地解決上述問題,還不趕緊來了解一下?

遠程調試

使用特定JVM參數運行服務端代碼

要讓遠程服務器運行的代碼支持遠程調試,則啟動的時候必須加上特定的JVM參數,這些參數是:

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port}

其中的${debug_port}是用戶自定義的,為debug端口,本例以5555端口為例。

本人在這里踩過一個坑,必須要說一下。在使用公司內部的自動化部署平台NDP進行應用部署時,該平台號稱支持遠程調試,只需要在某個配置頁面配置一下調試端口號(沒有填寫任何IP相關的信息),並且重新發布一下應用即可。事實上也可以發現,上述JVM參數中唯一可變的就是${debug_port}。但是實際在本地連接時發現卻始終連不上5555 的調試端口,仔細排查才發現,下面截取了NDP發布的應用所有JVM參數列表中與遠程調試相關的JVM啟動參數如下:

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=127.0.0.1:5555

將address設置為127.0.0.1:5555,表示將調試端口限制為本地訪問,遠程無法訪問,這個應該是NDP平台的一個bug,我們在自己設置JVM的啟動參數時也需要格外注意。

如果只是臨時調試,在端口號前面不要加上限制訪問的IP地址,調試完成之后,將上述JVM參數去除掉之后重新發布下,防范開放遠程調試端口可能帶來的安全風險。

本地連接遠程服務器debug端口

打開Intellij IDEA,在頂部靠右的地方選擇”Edit Configurations…”,進去之后點擊+號,選擇”Remote”,按照下圖的只是填寫紅框內的內容,其中Name填寫名稱,這里為remote webserver,host為遠程代碼運行的機器的ip/hostname,port為上一步指定的debug_port,本例是5555。然后點擊Apply,最后點擊OK即可

 
截圖201943017170.png

本地IDEA啟動debug模式

現在在上一步選擇”Edit Configurations…”的下拉框的位置選擇上一步創建的remote webserver,然后點擊右邊的debug按鈕(長的像臭蟲那個),看控制台日志,如果出現類似“Connected to the target VM, address: ‘xx.xx.xx.xx:5555’, transport: ‘socket’”的字樣,就表示連接成功過了。我這里實際顯示的內容如下:

Connected to the target VM, address: '10.185.0.192:15555', transport: 'socket'

設置斷點,開始調試

遠程debug模式已經開啟,現在可以在需要調試的代碼中打斷點了,比如:


 
12.png

如圖中所示,如果斷點內有√,則表示選取的斷點正確。

現在在本地發送一個到遠程服務器的請求,看本地控制台的bug界面,划到debugger這個標簽,可以看到當前遠程服務的內部狀態(各種變量)已經全部顯示出來了,並且在剛才設置了斷點的地方,也顯示了該行的變量值。


 
13.png

備注:需要注意的是,用於遠程debug的代碼必須與遠程部署的代碼完全一致,不能發生任何的修改,否則打上的斷點將無法命中,切記切記。

  

鏈接:https://www.jianshu.com/p/302dc10217c0 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM