MPS 2020.1 ヘルプ

デバッガー

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

基本

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

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

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

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

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

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

high.levelBaseLanguage に拡張または生成します

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

high.levelBaseLanguage に拡張も生成もしません

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

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 listwatchable の 2 つの新しいタイプが導入されました。

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

Map entry viewer

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

Map entry

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

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

まとめると、BaseLanguage 以外の言語をターゲットにしている場合は、通常次のように指定する必要があります。

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

トレーサブルノード

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

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

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

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

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

trace

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.

コンセプト

説明

実装する動作方法

TraceableConcept

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

getTraceableProperty – some property to be saved into trace.info file.

Position info

ScopeConcept

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

getScopeVariables – variable declarations in the scope.

Scope info

UnitConcept

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

getUnitName – name of the generated unit.

Unit info

trace.info ファイルは、テキストの生成中に、生成の最後の段階で作成されます。説明されている概念は、テキストに生成された言語でのみ使用されます。TraceableConceptScopeConcept、または UnitConcept削減規則によって生成されているときはいつでも、エントリは自動的に記入されます。

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

Trace marco

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

さまざまなノードにブレークポイントを作成する方法を指定するために、ルート 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.

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

breakpoints creator

より複雑なフィルタリング動作を提供するために、単純な複雑なリストの代わりにブレークポイント作成者は 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 コードを便利に実行できるようにするツールです。モデルをすばやく照会して変更することができます。自分のモデルに対して行動を起こしたり、あなたのプロジェクトに関する統計を研究することができます。例:(廃止予定の)概念のすべての(...