MPS 2019.2ヘルプ

デバッガー

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

基本

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

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

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

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

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

MPSは可能な限り自動化しようとしていますが、場合によっては言語設計者がウェイトリフティングのロールを果たす必要があります。言語を持っているとしましょう、それを呼び出しましょう。high.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(英語)

言語 jetbrains.mps.lang.traceable の概念 TraceableConcept , ScopeConcept および UnitConcept は、その目的に使用されます。一部の情報を trace.info ファイルに保存するには、これらの概念の1つから派生させ、特定の動作方法を実装する必要があります。以下の表で概念を説明します。

コンセプト

説明

実装する動作方法

サンプル

TraceableConcept

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

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

Position info

ScopeConcept

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

getScopeVariables - スコープ内の変数宣言

Scope info

UnitConcept

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

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

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 - javaデバッガのような特定のデバッガへの参照。

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

  • DebuggerType - デバッガへの参照のための特別な型

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

breakpoints creator

より複雑なフィルタリング動作を提供するために、単純な複雑なリストの代わりにブレークポイント作成者は isApplicable 関数を使用することができます。この機能の使用に切り替えるインテンションがあります。

最終更新日: 2019年8月30日

関連ページ:

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コードを便利に実行できるようにするツールです。モデルをすばやく照会して変更することができます。自分のモデルに対して行動を起こしたり、あなたのプロジェクトに関する統計を研究することができます。例:(廃止予定の)概念のすべての(またはい...