使用Java Debug Interface(JDI)調試多線程應用程式

來源:互聯網
上載者:User

多線程環境下的程式調試是讓開發人員頭痛的問題。在 IDE 中通過添加斷點的 方式偵錯工具,往往會因為停在某一條線程的某個斷點上而錯失了其他線程的執 行,線程之間的調度往往無法預期,並且會因為斷點影響了實際的線程執行順序 。因此,在調試多線程程式時,開發人員往往會選擇列印 Trace Log 的方式來幫 助調試。

使用 Log 來協助調試的問題在於,開發人員往往無法預期哪些關鍵點需要記錄 ,於是在整個程式的調試過程中,需要不斷的加入 Log 調用,編譯產生可執行 程式並部署,這對於大尺寸的軟體開發項目無疑是噩夢,會直接影響到開發效率 。

有沒有一種辦法,可以獨立於程式碼,能在運行期間綁定到程式上並擷取 程式運行過程當中的關鍵資訊呢?更重要的,這種方法應該是可定製的,開發人員 可以通過少量的努力,就可以達到特定的調試目的。答案是肯定的。通過使用 java Debug Interface(JDI),開發人員可以快速開發定製出適用於自己的線程 Profiling 工具。這樣的工具獨立於主程式,並且可高度定製。在接下來的文章 中,我們將介紹如何?該工具。

認識 JPDA 和 JDI

從 J2SE 1.3 開始,Java 開始提供了一套叫做 Java Platform Debugger Architecture(JPDA)的架構,開發人員可以通過這套架構來開發調試用程式。這 套架構被主流的 Java IDE(如 Eclipse、NetBeans 等)廣泛地採用。

具體來說,JPDA 不僅僅是一套 API 的組合,也不只是一個具體的工具。這 套架構提供了從目標程式、調試雙方的資訊協議,到供開發人員使用的結構調用, 都一一做出了定義。在 J2SE 5.0 中,它由三個部分組成:

Java Virtual Machine Tools Interface(JVMTI),是一套低層級的 native 介面。它定義了 JAVA 虛擬機器所必需為調試提供的服務介面。JVMTI 在 Java 5.0 之前的前身是 JVMDI(Jave Virtual Machine Debug Interface)。

Java Debug Wire Protocol(JDWP),定義了調試雙方資訊和請求的文本格 式。

Java Debuger Interface(JDI),定義了代碼層級的調試介面。

從開發人員的角度來看,調試工具的開發既可以基於 JVMTI 也可以基於 JDI。 JVMTI 是 native 介面,使用起來相對複雜,並且需要 C 語言的基礎,因此, 在本文中,我們將介紹如何使用 JDI 這種最上層的方式來開發 Java 偵錯工具 。

需求分析

在接下的部分,我們將介紹如何使用 JDI 來開發一個用來調試多線程程式的 工具。在開始前,讓我們先列出這個工具需要滿足的功能:

獨立於目標應用程式的。

應該足夠簡單,並且能在通過少量的代碼修改就能完成集中配置,這樣是幫 助開發人員不需要付出太多的努力就能開始調試自己的多線程程式。

能夠抓取足夠的資訊,比如說異常的資訊,程式調用過程中的變數值等等。

所產生的 Log 應該足夠清晰,能夠按不同的線程來分離記錄,而不是按照時 間的順序來產生每一條記錄,否則會給調試帶來不便。

實現

在文章最後的 範例程式碼 中,我們展示了一個典型的基於 JDI 的調試工具邏 輯,並且用它來 Profile 一個簡單的多線程程式的執行。根據前面所提到的需 求,代碼展示了線程運行棧快照、方法調用的入口參數值收集、異常過濾定製、 類過濾配置、線程 Log 記錄等功能。具體來說:

獨立於目標程式

分析工具可以通過如下方式啟動:

java Trace options class args

支援的 options 參數:

-output 檔案名稱:工具產生的 Log 的路徑

class 是目標程式的入口類,args 為目標程式的輸入參數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.