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

1. 前言

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

2. 遠程調試

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

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

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

3. 使用 IDEA 進行遠程調試

IntelliJ IDEA 進行遠程調試並不複雜通過下面幾個步驟就能夠很方便的配置。socket

3.1 本地參數配置

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

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

3.2 JDWP 協議

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

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

3.3 開啓遠程調試

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

請務必保證本地 debug 的代碼與遠程部署的代碼徹底一致,不能發生任何的修改!不然斷點將沒法命中!3d

4. 一些要點

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

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

5. 總結

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

關注公衆號:Felordcn獲取更多資訊

我的博客:https://felord.cn

相關文章
相關標籤/搜索