デバッガー
MPS は、カスタムデバッガーを作成し、java のデバッガーと統合するための API を提供します。MPS デバッガー機能の説明については、デバッガーの使用箇所ページを参照してください。
基本
ユーザーモデルから生成されるコードをデバッグするために、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 のクラスを表すように) - ノードが生成されるユニットの名前
言語 jetbrains.mps.lang.traceable
の概念 TraceableConcept
、ScopeConcept
、UnitConcept
は、その目的で使用されます。一部の情報を trace.info ファイルに保存するには、ユーザーはこれらの概念の 1 つから派生し、特定の動作方法を実装する必要があります。概念は次の表で説明されています。
コンセプト | 説明 | 実装する動作方法 | サンプル |
---|---|---|---|
| テキスト内のどの場所を保存し、どのブレークポイントを作成できるかについての概念。 |
| |
| スコープ内に見える、いくつかのローカル変数を持つ概念。 |
| |
| java のクラスや内部クラスのように、別々の単位に生成される概念。 |
|
trace.info ファイルは、テキストの生成中に、生成の最終段階で作成されます。説明されている概念は、テキストに生成された言語でのみ使用されます。TraceableConcept、ScopeConcept 又は UnitConcept 還元 ルールにより生成されるたびにエントリが、自動的に入力されます。
自動トレースが不可能な場合は、language.high からの概念の目的の入力ノードを生成コードと明示的に一致させるために $TRACE$ マクロを使用できます。
ブレークポイントクリエーター
さまざまなノードにブレークポイントを作成する方法を指定するために、ルート breakpoint creators
が使用されます。これは jetbrains.mps.debugger.api.lang
言語からの概念 BreakpointCreator
の根本です。ルートは言語プラグインモデルに配置されるべきです。それは BreakpointableNodeItem
のリストを含みます。それらの各々はブレークポイントを作成するための概念のリストと実際にブレークポイントを作成する方法を指定します。jetbrains.mps.debugger.api.lang
はデバッガーを操作するための、特にブレークポイントを作成するためのいくつかの概念を提供します。それらについて以下に説明します。
DebuggerReference – java デバッガーなどの特定のデバッガーへの参照。
CreateBreakpointOperation – 特定のプロジェクトの特定のノードに特定の種類のロケーションブレークポイントを作成する操作。
DebuggerType – デバッガーへの参照用の特別なタイプ。
次の例では、baseLanguage
の breakpoint creators
ノードが表示されています。
より複雑なフィルタリング動作を提供するために、単純な複雑なリストの代わりにブレークポイント作成者は isApplicable
関数を使用することができます。この機能の使用に切り替えるインテンションがあります。
関連ページ:
MPS デバッガーを使う
デバッグ:MPS デバッガーは、カスタム言語用のデバッガーを作成するための API を提供します。MPS ディストリビューションに含まれている Java デバッガープラグインは、ユーザーが最終的に Base Language/Java に生成される言語で書かれているプログラムをデバッグすることを可能にします。下記のプラグインを使って MPS デバッガーの機能を説明します。これらはすべて API を介して他の言語でも利用できます。実行 java アプリケーションをデバッグする方法の説明から始めます...
実行構成
導入:実行構成により、ユーザーは自分の言語で書かれたプログラムの実行方法を定義できます。既存の実行構成は、メインツールバーにある実行構成ボックスから実行できます。メインメニューのファイル名を指定して実行メニュー項目または実行 / デバッグポップアップ(Alt + Shift + F10 /Alt + Shift + F9)を使用します。実行構成は、ノード、モデル、モジュール、プロジェクトに対して実行 / 作成することもできます。例: JUnit 実行構成では、選択したプロジェクト、モジュール、...
デバッガー API
MPS は、MPS で動作するデバッガーエンジンを作成するための java API を提供します。どこから始めれば:カスタムデバッガーエンジンの作成を開始する良い方法は、MPS での Java デバッガープラグインの実装を調べることです。ソースコードは、ソリューション jetbrains.mps.debugger.java.api および jetbrains.mps.debugger.java.runtime にあります。デバッガー API 自体は jetbrains.mps.debugger.api....
ハウツー MPS Make フレームワークへの統合
ファセットを構築:概要基本的に他のビルドシステムや make システムと同様に、MPS make はアーティファクトをビルドするために一連のステップ、つまりターゲットを実行します。必要な make ステップのグローバルな順序付けは、各ビルドターゲットに指定された相対的な優先順位から導き出されます(ターゲット A は B の前に実行し、B は C の前に実行する必要があるため、グローバル順序は A、B、C です)。完全なビルドプロセスでは、モデルのテキストへの生成、これらのモデルのコンパイル、サ...
コンソール
コンソールは、開発者がアクティブなモデルに対して MPS 環境で直接 DSL コードを便利に実行できるようにするツールです。これにより、モデルをすばやくクエリして変更できます。モデルに対してアクションをトリガーしたり、プロジェクトに関する統計を調べたりすることができます。例: (廃止予定の)概念のすべての(またはいくつかの)インスタンスをすばやく取得し、新しい概念に移行することができます。#instances(TryStatement).where({~it => it.catchClau...