12.25 圖文並茂教你學會使用 IntelliJ IDEA 進行遠程調試

文章來源:https://mp.weixin.qq.com/s/3njFzJifUeFLFSvmdwWiXg


1. 前言

今天線上出現了個 Bug ,而且比較坑的是涉及到微信相關的東西不能線下調試。傳統方式是在代碼中各種的日誌 log 埋點然後重新部署進行調試,再根據 log 中的信息進行分析。如果你的 log 埋點不合理,就要不停的修改代碼、不停的打包部署。有沒有什麼騷操作避免上面的問題呢?

2. 遠程調試

當然有解決方案,這就是遠程調試(Remote debugging)。遠程調試使開發人員能夠直接診斷服務器或其它線上進程上的問題,它提供了跟蹤線上運行時錯誤並確定性能瓶頸和問題根源的方法,讓你能夠像在本地調試一樣 Debug 遠程服務器。接下來我們將使用流行的 Java IDE,由 JetBrains 出品的 IntelliJ IDEA 來進行遠程調試。要讓遠程服務器運行的代碼支持遠程調試,則啟動的時候必須加上特定的 JVM 參數,這些參數是:

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

其中 debug_port 是服務端開放的調試端口,後續本地配置會用到。


3. 使用 IDEA 進行遠程調試

IntelliJ IDEA 進行遠程調試並不複雜經過下面幾個步驟就可以很方便的配置。

3.1 本地參數配置

圖文並茂教你學會使用 IntelliJ IDEA 進行遠程調試

按照上面圖的位置打開配置面板新建一個 Remote 調試面板如下:

圖文並茂教你學會使用 IntelliJ IDEA 進行遠程調試

按照上圖所示的順序結合你自己服務器和本地環境依次進行配置,然後點擊確定就行了。其中步驟 2 和 4 端口就是我們遠端指定的 debug_port 端口號。

3.2 JDWP 協議

這裡有一個小小的知識點就是 參數中的 jdwp 。那麼什麼是 jdwp?

JDWP 是 Java Debug Wire Protocol 的縮寫,它定義了調試器(debugger)和目標虛擬機(target vm)之間的通信協議。Target vm 中運行著我們要調試的 Java 程序,它與一般運行的 JVM 沒有什麼區別,只是在啟動時加載了 JDWP Agent 從而具備了調試功能。而 debugger 就是我們本地的調試器,它向運行中的 target vm 發送指令來獲取 target vm 運行時的狀態和控制遠程 Java 程序的執行。Debugger 和 target vm 分別在各自的進程中運行,他們之間通過 JDWP 通信協議進行通信。

3.3 開啟遠程調試

圖文並茂教你學會使用 IntelliJ IDEA 進行遠程調試

點擊箭頭所示的 綠色甲蟲按鈕 (快捷鍵 Shift + F9) 就啟動調試了,然後設置好本地代碼的斷點,讓遠程的邏輯觸發斷點邏輯就可以進行打斷點調試了。

請務必保證本地 debug 的代碼與遠程部署的代碼完全一致,不能發生任何的修改!否則斷點將無法命中!

4. 一些要點

除了需要保證代碼一致外,這裡還有一些需要我們注意的地方。調試完畢遠程的 JDWP Agent 應該被禁用,也就是將遠端的相關參數去掉。另外在調試中遠端的日誌並不會映射到本地,當然你可以藉助一些工具將遠程的日誌映射到本地以提供更強大的調試功能。

還要記住,雖然遠程調試是一個非常強大的工具,但是它並非銀彈!生產環境不是調試的合適目標,請勿濫用!

5. 總結

正如我在本文中介紹的那樣,使用 IntelliJ IDEA 進行遠程調試非常簡單,只需幾個步驟即可使用。有些情況下它很方便地解決了我們的問題。但是它不應該被濫用,應該被合理地使用。


我目前是在職Java開發,如果你現在正在瞭解Java技術,想要學好Java,渴望成為一名Java開發工程師,在入門學習Java的過程當中缺乏基礎的入門視頻教程,你可以關注並私信我:01。我這裡有一套最新的Java基礎JavaSE的精講視頻教程,這套視頻教程是我在年初的時候,根據市場技術棧需求錄製的,非常的系統完整。


分享到:


相關文章: