デバッガー
MPS は、カスタムデバッガーを作成し、java のデバッガーと統合するための API を提供します。MPS デバッガー機能の説明については、デバッガーの使用箇所ページを参照してください。
- 基本
- BaseLanguage とその拡張機能のデバッグ - java デバッガーとの統合
- java デバッガー下での実行構成の起動
- カスタムビューアー
- カスタムデバッガーの作成
- トレーサブルノード
- ブレークポイントクリエーター
基本
ユーザーモデルから生成されるコードをデバッグするために、MPS は以下をする必要があります:
デバッガーでシームレスに 2 つの世界を一致させることができるようにするために、生成されたコードまでユーザモデルのノードを追跡します
どのノードにどのタイプのブレークポイントを作成できるかを理解する
デバッガーでデバッグされたコードを起動するためのオプションを知っている
オプションで、デバッグされたプログラムのメモリ内のデータの現在値をユーザーに表示するためのカスタマイズされたビューアーのセットもあります。
MPS は、できる限り自動化しようとしますが、一部のシナリオでは、言語設計者も重量挙げを行う必要があります。言語があると仮定して、high.level と呼びましょう。これは、いくつかの言語 low.level でコードを生成します。low.level は、テキストに直接生成されます(high.level と low.level の間に他のいくつかのステップがあります)。low.level から生成されたテキストが java クラスで構成されており、high.level 言語を MPS java デバッガーエンジンと統合したいとします。次の説明表を参照してください。
high.level は BaseLanguage に拡張または生成します | 何もする必要はありません。 |
---|---|
high.level は BaseLanguage に拡張も生成もしません | low.level のどの概念が追跡可能かを指定します。 |
BaseLanguage とその拡張機能のデバッグ - java デバッガーとの統合
BaseLanguage -generated 言語を MPS java デバッガーエンジンと統合するために、何かを指定する必要はほとんどありません。MPS は trace.info ファイル内の生成トレースを追跡することができるため、期待通りにブレークポイントを設定することができ、デバッガーはあなたの DSL コードを通して正しく進むことができます。
java デバッガー下での実行構成の起動
MPS は、java に生成された言語用の実行構成を作成するための特別な言語 - jetbrains.mps.baseLanguage.runConfigurations を提供します。これらの実行構成はデバッガーで自動的に起動することができます。詳細は java に生成された言語の実行構成を参照してください。
カスタムビューアー
変数ビューで変数とフィールドを表示するときに、特定の値を表示するための独自の方法を定義したい場合があります。たとえば、コレクションは、そのすべての内部構造を持つ通常のオブジェクトとしてではなく、要素のコレクションとして表示できます。
カスタムビューアーを作成するために MPS は jetbrains.mps.debugger.java.customViewers 言語を持っています。
jetbrains.mps.debugger.java.customViewers 言語により、特定の形式のデータ用に自分のビューアーを書くことができます。
customViewers 言語の主な概念は、カスタムデータビューアーです。生の java 値(スタック上のオブジェクト)を受け取り、いわゆるウォッチブルのリストを返します。ウォッチャーブルは、値とそのラベル(値がメソッド、フィールド、要素、サイズなどであるかどうかなど、値を分類する文字列)のペアです。ウォッチャーブルのラベルは custom watchables container
で定義されています。各ラベルにアイコンを割り当てることができます。
特定のタイプのビューアーは custom viewer
ルートで定義されています。次の表に custom viewer
部品を示します。
パーツ | 説明 |
---|---|
タイプ用 | このビューアーが対象としているタイプ。 |
包むことができます | 表示オブジェクト用の追加フィルター。 |
プレゼンテーションを受ける | オブジェクトの文字列表現 |
カスタムウォッチ可能品を入手 | このオブジェクトの部分値この関数の結果は型 |
カスタムビューアー言語には、watchable list
と watchable
の 2 つの新しいタイプが導入されました。
これは java.util.Map.Entry
クラスのカスタムビューアー仕様です。
そして、ここでマップエントリがデバッガービューでどのように表示されるかを見ます:
カスタムデバッガーの作成
言語の生成が BaseLanguage を回避するのであれば、手動でノードトレースとブレークポイント指定の面倒を見る必要があるでしょう。さらに、Java 以外の言語を生成している場合は、ターゲットプラットフォームデバッガーを MPS にアタッチする必要があります。MPS が提供するデバッガー API を使用すると、このような非 Java デバッガーを作成できます。必要なクラスはすべて「MPS 用デバッガー API」プラグインにあります。デバッガー API の説明も参照してください。
まとめると、BaseLanguage 以外の言語をターゲットにしている場合は、通常次のように指定する必要があります。
トレースすべきノード ( 追跡可能なノードを参照してください)
どのノードにブレークポイントを作成できるか ( ブレークポイント作成者を参照してください)
生成したソースをコンパイルする方法 ( ファセットを作るを参照してください)
デバッグ中にアプリケーションを起動する方法 (java に生成された言語の実行構成を参照してください)
これらのステップのすべてが絶対に必要というわけではありません - それらのどれが実際の言語に依存するかということです。
トレーサブルノード
このセクションでは、trace .info ファイルに追加情報を保存するために必要なノード(ノードから生成された位置テキスト、表示変数、ノードが生成されたファイルの名前などの情報)を指定する方法について説明します。 trace.info ファイルには、MPS 内のノードを生成されたテキストと接続するための情報が含まれています。例:ブレークポイントがヒットした場合、java デバッガーは MPS にソースファイルの行番号を伝え、この情報から実際のノードを取得するようにします。MPS は trace .info ファイルの情報を使用します。
具体的には、trace.info ファイルには次の情報が含まれています。
位置情報: テキストファイルの名前とその中でノードが生成された場所。
スコープ情報: 「スコープ」ノードごとに(それに関連付けられ、ノードのスコープ内で可視の変数がいくつかあります) - スコープ内で可視の変数の名前と ID。
ユニット情報:各 " ユニットノード "(言語のある単位、たとえば java のクラスを表すように) - ノードが生成されるユニットの名前
Concepts TraceableConcept
, ScopeConcept
and UnitConcept
of language jetbrains.mps.lang.traceable
are used for that purpose: To save some information into trace.info file, user should derive from one of those concepts and implement the specific behavior method: The concepts are described in the table below.
コンセプト | 説明 | 実装する動作方法 | 例 |
---|---|---|---|
| テキスト内のどの場所を保存し、どのブレークポイントを作成できるかについての概念。 |
| |
| スコープ内に見える、いくつかのローカル変数を持つ概念。 |
| |
| java のクラスや内部クラスのように、別々の単位に生成される概念。 |
|
trace.info ファイルは、テキストの生成中に、生成の最後の段階で作成されます。説明されている概念は、テキストに生成された言語でのみ使用されます。TraceableConcept、ScopeConcept、または UnitConcept が削減規則によって生成されているときはいつでも、エントリは自動的に記入されます。
自動トレースが不可能な場合は、language.high からの概念の目的の入力ノードを生成コードと明示的に一致させるために $TRACE$ マクロを使用できます。
ブレークポイントクリエーター
さまざまなノードにブレークポイントを作成する方法を指定するために、ルート breakpoint creators
が使用されます。これは jetbrains.mps.debugger.api.lang
言語からの概念 BreakpointCreator
の根本です。ルートは言語プラグインモデルに配置されるべきです。それは BreakpointableNodeItem
のリストを含みます。それらの各々はブレークポイントを作成するための概念のリストと実際にブレークポイントを作成する方法を指定します。 jetbrains.mps.debugger.api.lang
はデバッガーを操作するための、特にブレークポイントを作成するためのいくつかの概念を提供します。それらについて以下に説明します。
DebuggerReference – a reference to a specific debugger, like java debugger;
CreateBreakpointOperation – an operation which creates a location breakpoint of specified kind on a given node for a given project;
DebuggerType – a special type for references to debuggers.
次の例では、baseLanguage
の breakpoint creators
ノードが表示されています。
より複雑なフィルタリング動作を提供するために、単純な複雑なリストの代わりにブレークポイント作成者は isApplicable
関数を使用することができます。この機能の使用に切り替えるインテンションがあります。
関連ページ:

MPS デバッガーを使う
デバッグ :MPS デバッガーは、カスタム言語用のデバッガーを作成するための API を提供します。MPS ディストリビューションに含まれている Java デバッガープラグインは、ユーザーが最終的に Base Language / Java に生成される言語で書かれているプログラムをデバッグするこ...

実行設定
導入、設定、永続的なプロパティ、構成を互いに統合する、テンプレートパラメーター、コマンド、実行コマンドセクション、ProcessBuilder 式、デバッガー統合、構成、執行者、デバッガー統合、生産者、便利な例、パーソンエディター、実行コマンド、タスクの前に gcc でコンパイルする、Java エグ...

デバッガー API
MPS は、MPS で動作するデバッガーエンジンを作成するための java API を提供します。どこから始めれば、キークラス、価値観とウォッチ、SourcePosition と IPositionProvider、TraceInfoResourceProvider、最後、どこから始めればカスタムデ...

使い方 -MPS Make フレームワークへの統合
ファセットを構築 :概要 :基本的に他のビルドシステムや make システムと同様に、MPS make はアーティファクトをビルドするために一連のステップ、つまりターゲットを実行します。必要な make ステップのグローバルな順序付けは、各ビルドターゲットに指定された相対的な優先順位から導き出されま...

コンソール
コンソールは開発者がアクティブなモデルに対して MPS 環境で直接 DSL コードを便利に実行できるようにするツールです。モデルをすばやく照会して変更することができます。自分のモデルに対して行動を起こしたり、あなたのプロジェクトに関する統計を研究することができます。例:(廃止予定の)概念のすべての(...