MPS 2020.3 ヘルプ

デバッガー

MPS は、カスタムデバッガーを作成し、java のデバッガーと統合するための API を提供します。MPS デバッガー機能の説明については、デバッガーの使用箇所ページを参照してください。

基本

ユーザーモデルから生成されるコードをデバッグするために、MPS は以下をする必要があります:

  • デバッガーでシームレスに 2 つの世界を一致させることができるようにするために、生成されたコードまでユーザモデルのノードを追跡します

  • どのノードにどのタイプのブレークポイントを作成できるかを理解する

  • デバッガーでデバッグされたコードを起動するためのオプションを知っている

  • オプションで、デバッグされたプログラムのメモリ内のデータの現在値をユーザーに表示するためのカスタマイズされたビューアーのセットもあります。

MPS は、できる限り自動化しようとしますが、一部のシナリオでは、言語設計者も重量挙げを行う必要があります。言語があると仮定して、high.level と呼びましょう。これは、いくつかの言語 low.level でコードを生成します。low.level は、テキストに直接生成されます(high.levellow.level の間に他のいくつかのステップがあります)。low.level から生成されたテキストが java クラスで構成されており、high.level 言語を MPS java デバッガーエンジンと統合したいとします。次の説明表を参照してください。

high.level は BaseLanguage に拡張または生成されます

何もする必要はありません。

high.level は延長も BaseLanguage に発生しません。

low.level のどの概念を追跡可能にするかを指定します。
breakpoint creators を使用して、high.level のブレークポイントを設定できるようにします。

BaseLanguage とその拡張機能のデバッグ - java デバッガーとの統合

MPS java デバッガーエンジンを使用して BaseLanguage -generated 言語を統合するには、めったに何も指定する必要がありません。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 listwatchable の 2 つの新しいタイプが導入されました。

これは java.util.Map.Entry クラスのカスタムビューアー仕様です。

Map entry viewer

そして、ここでマップエントリがデバッガービューでどのように表示されるかを見ます:

Map entry

カスタムデバッガーの作成

言語の生成で BaseLanguage が回避される場合は、ノードのトレースとブレークポイントの指定を手動で行う必要があります。さらに、Java 以外の言語を生成している場合は、ターゲットプラットフォームデバッガーを MPS に接続する必要があります。MPS が提供するデバッガー API を使用すると、このような非 Java デバッガーを作成できます。必要なクラスはすべて、「Debugger APIfor MPS」プラグインにあります。デバッガー API の説明も参照してください。

要約すると、BaseLanguage 以外の言語をターゲットにする場合、通常は以下を指定する必要があります。

これらのステップのすべてが絶対に必要というわけではありません - それらのどれが実際の言語に依存するかということです。

トレーサブルノード

このセクションでは、trace .info ファイルに追加情報を保存するために必要なノード(ノードから生成された位置テキスト、表示変数、ノードが生成されたファイルの名前などの情報)を指定する方法について説明します。 trace.info ファイルには、MPS 内のノードを生成されたテキストと接続するための情報が含まれています。例: ブレークポイントがヒットした場合、java デバッガーは MPS にソースファイルの行番号を伝え、この情報から実際のノードを取得するようにします。MPS は trace .info ファイルの情報を使用します。

具体的には、trace.info ファイルには次の情報が含まれています。

  • 位置情報: テキストファイルの名前とその中でノードが生成された場所。

  • スコープ情報: 「スコープ」ノードごとに(それに関連付けられ、ノードのスコープ内で可視の変数がいくつかあります) - スコープ内で可視の変数の名前と ID。

  • ユニット情報: 各 " ユニットノード "(言語のある単位、たとえば java のクラスを表すように) - ノードが生成されるユニットの名前

trace

言語 jetbrains.mps.lang.traceable の概念 TraceableConceptScopeConceptUnitConcept は、その目的で使用されます。一部の情報を trace.info ファイルに保存するには、ユーザーはこれらの概念の 1 つから派生し、特定の動作方法を実装する必要があります。概念は次の表で説明されています。

コンセプト

説明

実装する動作方法

サンプル

TraceableConcept

テキスト内のどの場所を保存し、どのブレークポイントを作成できるかについての概念。

getTraceablePropertytrace.info ファイルに保存されるいくつかのプロパティ。

Position info

ScopeConcept

スコープ内に見える、いくつかのローカル変数を持つ概念。

getScopeVariables –スコープ内の変数宣言。

Scope info

UnitConcept

java のクラスや内部クラスのように、別々の単位に生成される概念。

getUnitName –生成されたユニットの名前。

Unit info

trace.info ファイルは、テキストの生成中に、生成の最終段階で作成されます。説明されている概念は、テキストに生成された言語でのみ使用されます。TraceableConcept、ScopeConcept 又は UnitConcept 還元 ルールにより生成されるたびにエントリが、自動的に入力されます。

自動トレースが不可能な場合は、$TRACE$ マクロを使用して、language.high からの概念の目的の入力ノードを、生成されたコードと明示的に一致させることができます。

Trace marco

ブレークポイントクリエーター

さまざまなノードにブレークポイントを作成する方法を指定するために、ルート breakpoint creators が使用されます。これは jetbrains.mps.debugger.api.lang 言語からの概念 BreakpointCreator の根本です。ルートは言語プラグインモデルに配置されるべきです。それは BreakpointableNodeItem のリストを含みます。それらの各々はブレークポイントを作成するための概念のリストと実際にブレークポイントを作成する方法を指定します。 jetbrains.mps.debugger.api.lang はデバッガーを操作するための、特にブレークポイントを作成するためのいくつかの概念を提供します。それらについて以下に説明します。

  • DebuggerReference – java デバッガーなどの特定のデバッガーへの参照。

  • CreateBreakpointOperation –特定のプロジェクトの特定のノードに特定の種類のロケーションブレークポイントを作成する操作。

  • DebuggerType –デバッガーへの参照用の特別なタイプ。

次の例では、baseLanguagebreakpoint creators ノードが表示されています。

breakpoints creator

より複雑なフィルタリング動作を提供するために、単純な複雑なリストの代わりにブレークポイント作成者は 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 フレームワークへの統合

ファセットを構築:概要基本的に他のビルドまたはメイクシステムと同様に、MPS メイクは一連のステップまたはターゲットを実行してアーティファクトをビルドします。必要な make ステップのグローバル順序は、各ビルドターゲットに指定された相対的な優先順位から導出されます(ターゲット A は B の前に実行する必要があり、B は C の前に実行する必要があるため、グローバル順序は A、B、C です)。完全なビルドプロセスでは、モデルをテキストに生成する、これらのモデルをコンパイルする、サーバーにデプ...

コンソール

コンソールは、開発者がアクティブなモデルに対して MPS 環境で直接 DSL コードを便利に実行できるようにするツールです。これにより、モデルをすばやくクエリして変更できます。モデルに対してアクションをトリガーしたり、プロジェクトに関する統計を調べたりすることができます。例: (廃止予定の)概念のすべての(またはいくつかの)インスタンスを素早く取得し、新しい概念に移行することができます。#instances(TryStatement).where({~it => it.catchClaus...