13

編集:まったく新しいデバッガーを作成せずにこれにアプローチできる方法がいくつかあるはずです。私は現在、既存の Java デバッガーの上に構築する方法を検討しています。Java デバッガーが既に持っている情報 (スタック フレーム、変数、生データなど) を取得する方法について誰かがアイデアを持っている場合、それは本当に役に立ちます。

--

私がやろうとしているのは、このフレームワーク/API を Java 上に構築しており、フレームワークに合わせてカスタマイズされた Eclipse プラグイン デバッガーを書きたいということです。以下に簡単な例を示します。

スコープと呼ばれるクラスと変数と呼ばれるクラスの 2 つのクラスがあります。スコープは、変数のマップを保持します。コードはすべて 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 でプラグインを開発したり、デバッガーを作成した経験がほとんどないため、この種の問題に対処する方法について高レベルの推奨事項があるかどうかを知りたかっただけです。

ありがとう!

4

3 に答える 3

6

簡単な作業ではありません。その記事は今でも主なリファレンスだと思います。古いですが、時代遅れではありません。それを消化し、できれば機能させるようにしてください。その前に、Eclipse プラグインの開発に関する最小限の経験が必要です。

図には多くの部分がありますが、最初に理解しなければならないことは、Eclipse が何かをデバッグしているとき (標準のデバッグ モデルを使用していると仮定して)、Eclipse 側とインタープリター側 (または、必要に応じて、「ローカル」側と「リモート」側)。

Eclipse 側では、いくつかの Eclipse コア クラスと、いくつかの Eclipse クラス/インターフェースを拡張または実装する独自のいくつかのクラスとの間の連携がプログラミングに含まれます。

  • " launchConfigurationType " (plugin.xml の拡張ポイント) は、"Debug As -> New Configuration) をクリックしたときに新しいカスタム構成の出現を引き起こします。これは、"Tabs" ダイアログを定義するいくつかの " launchConfigurationTabGroups " 定義と一緒になります。これは、カスタム起動構成 (例: ) に表示されます (通常、各タブには独自のクラスがあります)。

  • launchConfigurationType は通常、ブートストラップ クラスの一種であるLaunchDelegateクラスに関連付けられています。Eclipse 側と「インタープリター」(または「リモート」) 側の両方で、実行中/デバッグ中のインスタンスを作成および開始する責任があります。 .

  • Eclipse 側では、実行中/デバッグ中のインスタンスは IDebugTargetオブジェクトとその子によって表されます (実装はユーザーの責任です)。これは LaunchDelegate によって作成され、起動時にリモートで実行されているプロセスに「接続」されます。

  • リモート側、実際にデバッグしているインタープリターまたはプログラムは何でもかまいません: バイナリ実行可能ファイル、perl スクリプト、あるサイトで実行されているアプリ (おそらくローカルの Java プログラムでもありますが、この場合でも、おそらくデバッグ用の Eclipse JVM ではなく、独自の JVM で実行してください!)。IDebugTarget オブジェクトは、「リモート インタープリター」との通信方法 (TCP などによる) と、典型的なデバッガー タスク (ブレークポイントの配置、ステップ実行、実行、変数の要求など) の実行方法を認識している必要がありますが、ここでのプロトコルはユーザー次第です。それは完全に任意です。

  • 任意ではないのは、実行中の Eclipse デバッガーが使用するカスタム クラスの階層です。これらはルートとして IDebugTarget を持ち、「デバッグ モデル」を実装する必要があります (記事の図を参照)。上で述べたように、IDebugTarget オブジェクトは、EClipse 側とリモート側の間で変換を行う方法を理解している人物です (この画像を参照) 。

于 2012-06-22T22:15:42.393 に答える
0

わかりました、ここに 2 番目の回答を追加します…カスタム詳細フォーマッタがうまくいかない理由を知るには、私はあなたの環境の状態に十分に精通していないと思います。ほとんどの場合、探しているものを提供してくれると思います。

しかし、これらのアイテムを保持する別のビューを作成することに本当に興味がある場合は、eclipse jdt projectを確認してください。それが提供する拡張ポイントによって、追加しようとしている内部変数やスタック フレーム情報、さらには作業を容易にする UI にアクセスできるようになる可能性は十分にあります。

つまり、完全に新しいデバッガー プラグインを作成する必要はなく、おそらく jdt と連携できるプラグインを作成する必要があります。

このサイトには、プロジェクト計画、ソース リポジトリ、bugzilla 問題追跡データベース (バグ追跡と新機能の議論の両方に使用される) へのポインタがあります。おそらく、jdt の専門家の何人かは、あなたのニーズに最も適したものについて意見を述べてくれるでしょう。

于 2012-06-28T18:58:57.163 に答える