不同Java除錯方法總結 - Vardhan

banq發表於2021-07-06

本文將講一些我們作為Java程式設計師構建優秀系統應該知道的Java除錯方法。
除錯過程可以分為四個主要步驟:定位、分類、理解和最終修復錯誤。本地化意味著確定錯誤在程式碼中的位置。特定的服務或功能可能負責產生錯誤。
使用版本控制管理系統是另一種從提交中識別或縮小錯誤的好方法;git-bisect是實現這一目標的有用工具。之後,我們必須對錯誤進行分類,即它是句法、語義錯誤,它是否依賴於某些外部值,還是與構建錯誤有關?
 
不同的除錯方法:
在除錯方面,我們使用的工具和技術是必不可少的,它們可以決定修復程式碼中的問題的難易程度。我們來談談一些流行的方法。

1. 使用斷點
斷點是一種有意在程式中為除錯目的而設定的特定行處停止或暫停的方式。偵錯程式在該行上放一段程式碼,在執行過程中,它可以呼叫偵錯程式或在 CPU 級別建立中斷,將其傳遞給偵錯程式的異常處理程式。
在 Java 中,我們可以使用條件斷點或異常斷點。條件斷點最適合 Eclipse IDE,因為它們可用於透過指定條件刪除程式中的錯誤,當它為真時執行緒將在目標行停止。異常斷點可以在Eclipse和Netbeans中使用;它們也不與單個程式碼行相關聯,因此適用於整個過程。
不同的偵錯程式對其除錯控制演算法有不同的實現,可以向斷點新增條件,這有助於在特定階段有條件地停止或暫停程式碼。有些人可以選擇在再次恢復執行之前操作一段資料。
 

2.列印除錯
列印除錯是每個開發人員在其開發生涯的某個階段使用的最常用的技術,在應用程式執行期間將值轉儲到應用程式控制臺或使用者介面。這也可用於 Java 和其他程式語言。
我們開發人員這樣做是為了瞭解函式或服務內部的流程,有時是為了瞭解獲取或操作的資料的形狀。根據我們假設錯誤所在的位置將列印語句新增到程式碼中——沒有固定的約定。
雖然這不是一種非常可靠的除錯方法,但在涉及愚蠢錯誤、開發人員無法理解應用程式流程或導致錯誤的程式碼塊可識別的情況下,它非常方便。

3. 遠端除錯
這是一種廣泛使用的技術,涉及當偵錯程式和應用程式不在同一平臺/伺服器上執行時遠端除錯程式。遠端除錯有時與生產除錯同時進行。
當我們為資源最少且無法同時包含執行應用程式和除錯應用程式程式碼的小型裝置開發軟體時,遠端除錯是首選方法。此外,當我們嘗試除錯具有多個元件連線並相互通訊以服務客戶端請求(例如微服務)的大型應用程式時,它也很有用。
正如我們所知,偵錯程式需要透過基本鉤子連線到作業系統和應用程式,以便它可以觸發除錯過程。當我們在應用伺服器中安裝遠端除錯程式碼時,它本身不是偵錯程式,它只是連線到執行伺服器的應用程式。它還透過網路連線到遠端偵錯程式,並向遠端偵錯程式傳送或接收命令。
有許多遠端除錯工具。一個例子是 Lightrun;他們提供Lightrun Cloud,這是一款免費使用的生產偵錯程式,具有日誌記錄功能和暫存環境。它在用於 Java 應用程式的 IntelliJ IDE 上執行,非常適合 Monolith、微服務、Kubernetes、Docker Swarm、ECS、大資料工作者、無伺服器以及更多此類應用程式。
另一個很好的例子是Eclipse。雖然 Eclipse 也是一個 IDE,但它具有許多用於除錯的高階功能,這使其成為一個整體工具。它適用於 Java、Python、Ruby、C# 和 PHP。Eclipse 的一個常見用途是管理遠端除錯配置,它可以非常輕鬆地實現相同的功能,使其在 Java 開發社群中非常流行。
 

4. 記憶體轉儲除錯
當程式崩潰時,系統會建立記憶體快照以及它在特定時間儲存的資料。這稱為記憶體轉儲。因此,這很有用,因為開發人員可以輕鬆找到程式崩潰的確切位置並進行記憶體轉儲,以檢視在該點呼叫的函式的“堆疊跟蹤”以及可訪問的區域性或全域性變數的值。
但這裡的關鍵事實是我們可以在沒有崩潰的情況下獲得記憶體轉儲,因為存在程式永遠不會崩潰的不同型別的錯誤。我們談論的是程式的記憶體轉儲,但我們也可以獲得整個系統的記憶體轉儲,其中多個程式從不同的應用程式執行。
當您有多個 Java 應用程式相互通訊時,這很有用,並且您無法準確確定誰對建立錯誤負責。但是,如果核心崩潰與程式或系統崩潰不同,則有時獲取記憶體轉儲具有挑戰性,因為它在獲取轉儲之前釋放了記憶體。
 

5. 回放除錯

重放除錯是另一種有用的技術。這個想法來自逆向工程,在那裡我們有一個明確定義的實際過程流,從那裡,我們可以追溯到問題。重放除錯的第一步是記錄執行過程中的所有事件呼叫、記憶體管理、硬碟中的資料更改、使用者輸入和其他連線的裝置輸出都新增到快照中。
這段錄音是透過執行流程然後監控觸發的不同事件而生成的。最後,當程式結束時(它可以成功完成或有系統中斷或程式可能崩潰),它包含執行週期中的所有相關資訊。
開發人員或質量保證工程師可以使用此記錄來遍歷流程的執行路徑或連線到偵錯程式並嘗試確定出了什麼問題。當我們嘗試重新生成錯誤時,這可能會派上用場,因為它為我們提供了整個過程的整體檢視。


 

相關文章