debug技巧之遠端除錯

sum墨發表於2024-05-16

一、前言

大家好啊,我是summo,今天給大家分享一下我平時是怎麼除錯程式碼的,不是權威也不是教學,就是簡單分享一下,如果大家還有更好的除錯方式也可以多多交流哦。

當我們的應用釋出到線上之後,就不能隨意啟停了,但如果線上出現了BUG怎麼辦呢?大多數時候我們會藉助線上列印的日誌進行排查問題,如果幸運的話很快就可以定位到問題,但不幸的話就麻煩了。首先出錯的地方可能根本沒有列印日誌或者日誌列印不全,其次有可能本地是好好的但線上就是不行,總之倒黴的時候喝涼水都塞牙。。。

每當碰到這個情況我就在想,要是我能像本地除錯一樣除錯線上的程式碼就好了,保證很快就可以排查出問題。之前經驗少,以為我這個想法不可能實現,後來才發現只有我想不到,沒有別人做不到的,這種遠端除錯的方式真的有,而且實現起來還挺簡單。

接下來我就給大家介紹一下IntelliJ IDEA 自帶的Remote JVM Debug幫助我們實現遠端除錯。

IntelliJ IDEA 提供了一個非常有用的功能,即遠端除錯(Remote JVM Debug)。這個功能允許開發者在不重啟應用的情況下,連線到一個正在執行的 Java 應用程式,並進行除錯。

二、Remote JVM Debug

1. 配置遠端除錯埠

首先,你需要在執行的 Java 應用程式中啟用遠端除錯功能。這通常是透過在啟動應用程式時新增 JVM 引數來實現的:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 -jar demo.jar 

這裡以 5005 埠為例,suspend=n 表示 JVM 啟動時不會暫停,直到偵錯程式連線上。例如這樣:

注意:-agentlib-jar順序不要搞反了,否則無法啟動監聽。

2. 啟動 IntelliJ IDEA 的遠端除錯

(1)找到Edit Configurations...

(2)點選左上角的 "+" 號,選擇 "Remote JVM Debug"

(3)輸入遠端除錯的配置

  • 在 "Name" 欄位中輸入配置名稱。
  • 在 "Host" 欄位中輸入執行 Java 應用程式的主機地址(如果是本機,可以使用 localhost)。
  • 在 "Port" 欄位中輸入你之前設定的遠端除錯埠(例如:5005)。

(4)啟動遠端除錯

當你的 Java 應用程式執行並且已經啟用了遠端除錯功能後,IntelliJ IDEA 應該能夠檢測到它。如果一切正常,IDEA 將顯示一個對話方塊,提示一個遠端 JVM 正在嘗試連線,就像下圖所示。

進到這個介面,說明你成功進入了遠端除錯,現在你可以在程式碼中設定斷點,就像在本地除錯一樣。當程式執行到斷點處時,它將暫停,允許你檢查變數、呼叫棧和程式狀態。

(5)不要讓斷點卡主整個程序

由於遠端除錯執行到斷點處,整個專案都會被卡住,這個時候就需要對該斷點設定一下。

3. 注意事項

  • 確保防火牆設定允許除錯埠的通訊。
  • 如果你的應用程式已經在執行,並且沒有啟用遠端除錯,你可能需要重啟它。
  • 在除錯過程中,保持網路連線穩定,以避免除錯會話中斷。
  • 這個遠端除錯相當於開了個後門,除錯結束之後要記得及時關閉。

三、小結一下

Remote JVM Debug給我們排查線上BUG提供了一份新的方案,什麼情況下用,什麼時候使用這個看個人。對於我來說,排查線上BUG首先還是看日誌,其實是利用arthes,最後實在搞不定才會使用Remote JVM Debug,我是不太建議經常使用遠端除錯,建議線下測試,防止造成生產資料破壞或洩漏。

相關文章