深入Java除錯技術 -Ari Noman

banq發表於2020-06-03

軟體錯誤是開發過程中不可避免的一部分。因此,除錯是每個程式設計師都應具備的一項核心技能。因此,Java除錯是每個程式設計師都應具備的一項核心技能。
它不僅可以幫助您瞭解程式流程,還可以提高程式碼質量。最後,它提高了您作為開發人員解決問題的能力,並最終提供了質量更高的軟體。
本文深入探討了Java除錯的一些最重要的技巧和技術。在生產環境中除錯Java時,我們還將介紹最佳實踐。
本節彙總了除錯Java專案時要使用的一些技巧和竅門,包括斷點,步驟過濾器,拖放到框架等。即使在最複雜的情​​況下也可以應用這些。

條件斷點
一個斷點用於指定的地步除錯時,程式的執行應停止。透過暫時掛起執行,您可以調查程式的欄位和變數,更改其值等等。條件斷點設定為在滿足特定條件時觸發,以便您可以檢查程式的狀態。一般透過IDE設定實現。

更多型別的斷點
除了上面介紹的斷點型別外,還有其他型別的斷點,但是這取決於您使用的Java IDE。它們包括:

  • 基於事件的斷點 -這些斷點與事件相關,通常在遇到偵錯程式識別的事件時觸發。
  • 欄位觀察點 -每當給定欄位或表示式的值更改時,這種型別的斷點將停止執行程式。除錯時,可以指定欄位觀察點以在讀取,修改或同時讀取和/或表示式時停止執行。
  • 方法斷點 -用於在到達或退出指定方法或其實現時暫停程式。這使您可以檢查特定方法的進入或退出條件。
  • 行斷點 -當程式到達斷點中設定的特定程式碼行時,暫停程式的執行。


使用Rookout使使用斷點更容易

Rookout是下一代除錯平臺,旨在幫助開發人員在程式程式碼中新增不間斷的斷點,以便他們可以收集所需的任何型別的資料。它允許您指定規則以完善何時或如何觸發斷點的條件。
藉助斷點上的斷點進行除錯的一件很酷的事情是它的斷點狀態功能-一個簡單的可視指示器,可提供有關斷點行為方式的快速反饋。斷點狀態顯示為斷點旁邊(在右側窗格中)的警告標誌或燈泡。
轉換中的斷點狀態有五種型別,分別是:

  • 活躍(純紫色)
  • 待處理(紫色
  • 警告(帶三角形的純紫色)
  • 錯誤(紫色,帶有三角形)
  • 失效(灰色)

斷點狀態功能使您甚至可以在收到日誌行或除錯訊息之前就對程式有所瞭解。此資訊使您的除錯更加容易。

步驟濾波器

透過步驟篩選,您可以定義在除錯期間可以跳過的程式包。當您需要從一個類轉換到另一個類,訪問外部庫或使用框架而不測試框架的類時,這一點尤其重要。
透過使用步驟篩選器功能限制轉換,可以跳過特定的程式包。在Eclipse中,可以透過“ 視窗首選項”>“ Java除錯”>“步驟過濾”來配置步驟過濾器。


Drop to frame
此技術使您可以在除錯過程中選擇並重新執行程式的一部分。您可以選擇呼叫堆疊中的任何幀,並將偵錯程式設定為從該點重新啟動。
要使用此功能,請在堆疊中選擇一個框架或一個關卡,然後在“除錯”檢視中單擊“ Drop-to-frame ”按鈕。
儘管此功能執行某種後退或重置,但它不會影響您的欄位或現有資料。例如,如果您將一些條目寫入資料庫,然後下降到上一個級別或框架,則這些條目仍將保留在資料庫中。

遠端除錯
大多數Java IDE(例如Eclipse)允許開發人員除錯在另一臺裝置或Java虛擬機器(JVM)上執行的應用程式。但是,您將需要使用某些標誌來啟動Java程式。
下面的程式碼片段演示瞭如何完成此操作:

Java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp: transport=dt_socket, server=y, suspend=y, address=5005


Eclipse使用者可以輸入主機名和埠號進行連線以進行遠端除錯.

在生產中除錯Java
當今的軟體開發環境節奏如此之快,因此研發團隊一直在努力透過將程式碼更快地投入生產來滿足這些需求。但是,無論您的測試過程有多麼嚴格,有時都會出錯。
此外,當程式碼投入生產且實際資料正在系統中流動時,事情可能會很快消失。為了在系統擴充套件時保持領先地位,解決應用程式中的潛在漏洞很重要。
每個Java開發人員都可以實施以下策略:

  • 識別何時發生錯誤
  • 評估錯誤對優先順序的嚴重程度
  • 找出導致程式執行錯誤的狀態
  • 接下來,跟蹤並解決根本原因
  • 最後,部署有效的修補程式

除了使用上述五步策略之外,還應遵循一些最佳生產除錯實踐

提升日誌記錄級別
如果錯誤日誌包含足夠詳細的訊息,則除錯應用程式會更容易。在大多數情況下,錯誤訊息沒有提供足夠的上下文,因此程式設計師應增加日誌級別。
這使您能夠捕獲整個上下文並瞭解導致錯誤的確切原因。每條日誌行都應幫助您跟蹤錯誤的根本原因。
一種實際的但經常未充分利用的跟蹤錯誤來源的方法是在每個執行緒的應用程式入口點生成UUID。

集中日誌
一個有效的記錄機制處理的生產或應用程式生命週期的任何其他階段期間的錯誤時應該優先。
在會話期間記錄所有重要事件並將日誌儲存在集中式伺服器中進行分析可以使除錯更加容易。
它還可幫助您在跟蹤關鍵產品指標時,關注應用程式出現問題的情況。

檢查堆疊跟蹤和其他日誌
除錯異常時,堆疊跟蹤會派上用場。它們可幫助您確定程式崩潰時已呼叫了哪些函式。
使用堆疊跟蹤,可以更容易地找出問題出在哪裡,因為您可以檢視導致異常的呼叫的順序。

複製例項
保留日誌後,重要的是要複製情況/例項。這可以透過建立類似的環境來完成,以便您可以在IDE中看到問題。
重現情況有助於解決錯誤,因為您可以更好地理解程式碼和環境。

總結
Java除錯過程不必是一場噩夢。您只需要具有創新的心態並使用正確的工具即可。退出功能就是這樣一種工具,可以幫助開發人員加快除錯過程。它旨在幫助您以更高的置信度,速度和準確性來識別,診斷和解決程式碼中的錯誤。


 

相關文章