デバッガー
MPS は、カスタムデバッガーを作成するための API を提供するとともに、Java 用デバッガーとの統合も可能にします。MPS デバッガーの機能については、デバッガーの使用箇所ページを参照してください。
基本
ユーザーモデルから生成されるコードをデバッグするために、MPS は以下をする必要があります:
デバッガーでシームレスに 2 つの世界を一致させることができるようにするために、生成されたコードまでユーザモデルのノードを追跡します
どのノードにどのタイプのブレークポイントを作成できるかを理解する
デバッガーでデバッグされたコードを起動するためのオプションを知っている
オプションとして、デバッグ対象プログラムのメモリ内のデータの現在の値をユーザーに表示するためのカスタマイズされたビューアーセットも用意できます。
MPS は可能な限り自動化しようとしますが、場合によっては言語設計者も作業の一部を行う必要があります。たとえば、high.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 デバッガープラグインを使用すると、最終的に基本言語 /Java に生成される言語で記述されたプログラムをデバッグできます。以下では、このプラグインを使用して MPS デバッガーの機能を説明します。これらの機能はすべて、API を介して他の言語でも利用可能です。実行まず、java アプリケーションのデバッグ方法について説明します。ユーザーが mai...
実行構成
導入:実行構成により、ユーザーは自分の言語で書かれたプログラムの実行方法を定義できます。既存の実行構成は、メインツールバーにある実行構成ボックスから実行できます。メインメニューのファイル名を指定して実行メニュー項目または実行 / デバッグポップアップ(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 フレームワークへの統合
ファセットを構築:概要基本的に他のビルドシステムやメイクシステムと同様に、MPS の make は一連のステップ(ターゲット)を実行してアーティファクトを作成します。必要な make ステップの全体的な順序は、各ビルドターゲットに指定された相対的な優先順位から導き出されます(ターゲット A は B より前に実行される必要があり、B は C より前に実行される必要があるため、全体的な順序は A、B、C となります)。完全なビルドプロセスでは、モデルのテキストへの生成、これらのモデルのコンパイル、...
コンソール
コンソールは、開発者が MPS 環境でアクティブなモデルに対して DSL コードを直接実行できるツールです。モデルのクエリや変更が可能になり、モデルに対するアクションを実行したり、プロジェクトの統計情報を分析したりできます。例: (非推奨の) 概念のインスタンスをすべて (または一部) 取得し、新しい概念に移行できます。#instances(TryStatement).where({~it => it.catchClause.isNotEmpty; }).refactor({~node =...


