簡體   English   中英

編寫自定義eclipse調試器

[英]Writing a custom eclipse debugger

編輯:必須有一些方法可以在不編寫全新調試器的情況下實現此目的。 我目前正在研究在現有java調試器之上構建的方法。 如果有人對如何獲取Java調試器已有的信息有任何想法(關於堆棧幀,變量,原始數據等),那將非常有用。

-

我想要做的是我有這個基於Java的框架/ API,我想編寫一個為我的框架定制的eclipse插件調試器。 這是一個簡單的例子:

我有兩個類,一個叫做范圍,一個叫做變量。 范圍包含變量圖。 代碼全部都在java中,但我使用這個范圍變量關系幾乎就像一種新語言,並且想要一個變量調試選項卡,它給出了當前活動范圍的列表,其中包含當前存儲的變量。 這是一些代碼:

import java.util.Hashtable;

public class Scope {
    private Hashtable<String, Variable> variableList = new Hashtable<String, Variable>();

   // constructor 
    public Scope(){

    }

    public void put(String key, Variable v){
        variableList.put(key, v);
    }

    public Variable get(String key){
        return variableList.get(key);
    }


}

public class Variable {

    private String value;
    private String name;

    public Variable(String aName, String aValue){
        name = aName;
        value = aValue;
    }

    public String getValue(){
        return value;
    }

    public String getName(){
        return name;
    }

    public void setValue(String aValue){
        value = aValue;
    }
}

這顯然是一個非常簡單的例子,但是我想完成類似的事情,我可以獲得一個變量窗口,設置一個斷點,並有一個“調試器”列出我的活動范圍對象和里面的變量對象。

我一直在努力閱讀和理解: http//www.eclipse.org/articles/Article-Debugger/how-to.html

它非常密集(以及非常過時),但我會花一些時間來理解它。 我只是想看看是否有人有關於如何處理這類問題的任何高級建議,因為我沒有經驗在eclipse中開發插件或制作調試器。

謝謝!

這不是一件容易的事。 我認為那篇文章仍然是主要的參考。 舊的,但不過時。 嘗試消化它,並最好使其工作。 在此之前,您應該具有開發Eclipse插件的最小經驗。

圖中有很多部分,但您必須首先理解的是,當Eclipse調試某些東西時(假設我們使用的是標准調試模型),我們有兩個獨立的“世界”:Eclipse端和解釋端(或者,如果您願意,可以選擇“本地”和“偏遠”方面。

在Eclipse方面,編程涉及一些Eclipse核心類與您自己的一些類之間的合作,這些類擴展或實現了一些Eclipse類/接口:

  • A“launchConfigurationType”(在plugin.xml擴展點),這導致當你點擊一個新的自定義配置的幽靈“調試方式- >新建配置);這正好togetther一些” launchConfigurationTabGroups“定義,定義了‘標簽’對話這將出現在您的自定義啟動配置中( 例如 )(每個Tab通常都有自己的類)。

  • launchConfigurationType通常與LaunchDelegate類相關聯,該類是您的引導類:它具有創建和啟動運行/調試實例的責任,在Eclipse端和“解釋器”(或“遠程”)端都是如此。

  • 在Eclipse端,運行/調試實例由IDebugTarget對象及其子對象表示(實現是您的責任); 這是由LaunchDelegate創建的,並在啟動時“附加”到遠程運行的進程。

  • 你正在調試的遠程端,解釋器或程序可以是任何東西:二進制可執行文件,perl腳本,某個站點中運行的某個應用程序(也許是本地Java程序;但是,即使在這種情況下,這可能是在自己的JVM中運行,而不是在調試Eclipse JVM中運行!)。 您的IDebugTarget對象必須知道如何與“遠程解釋器”進行通信(例如,通過TCP)並執行典型的調試器任務(放置斷點,步進,運行,詢問變量等) - 但此處的協議取決於您,這完全是武斷的。

  • 什么不是任意的是運行的Eclipse調試器將使用的自定義類的層次結構:這些應該具有作為root的IDebugTarget,並且應該實現“調試模型”(參見文章中的 )。 如上所述,IDebugTarget對象是誰了解如何在EClipse端和遠程端之間進行轉換(參見此圖

曾經在eclipse edc調試器上工作,聽起來像編寫一個完整的調試器並不是你想要的。

這聽起來像在運行調試器時,您將可以訪問具有您感興趣的變量和范圍的對象。

您可以在類本身中使用toString()或使用詳細格式化程序來顯示所需信息的變體。 toString()調用可以非常詳細並嵌入調用,顯示整個數組等。詳細格式化程序也可能非常復雜。

http://www.robertwloch.net/2012/01/eclipse-tips-tricks-detail-formatter/ 它是幾個URL中最好的(我與作者沒有關聯)。

一旦您對Variable和Scope對象的輸出感到滿意,您應該能夠添加將始終在表達式窗口中顯示它們的監視表達式(因此您不必依賴堆棧框架中的局部變量)在)。

然后,這應該為您提供正在跟蹤的框架中的變量和范圍列表...希望無需編寫完整的eclipse調試器插件。

好吧,我要在這里添加第二個答案......我想我對你的環境狀態不太熟悉,不知道為什么自定義細節格式化程序不能解決問題。 在大多數情況下,我認為他們會為您提供您正在尋找的東西。

但如果你真的有興趣創建另一個持有這些項目的視圖,那么你可以查看eclipse jdt項目 它提供的擴展點完全有可能讓您訪問您想要添加的內部變量和堆棧框架信息,也可能是一些可以使您的工作更輕松的UI。

換句話說,您可能不必編寫一個全新的調試器插件,但可能是一個可以與jdt一起工作的插件。

該站點指向項目計划,源存儲庫,bugzilla問題跟蹤數據庫(用於錯誤跟蹤和新功能討論)。 也許一些jdt專家可以幫助他們對最適合您需求的觀點進行評估。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM