次の方法で共有


ローカル変数のサンプル実装

重要

Visual Studio 2015 では、式エバリュエーターを実装するこの方法は非推奨になりました。 CLR 式エバリュエーターの実装の詳細については、CLR 式エバリュエーターの とマネージド式エバリュエーターのサンプル を参照してください。

Visual Studio が式エバリュエーター (EE) からメソッドのローカルを取得する方法の概要を次に示します。

  1. Visual Studio は、デバッグ エンジンの (DE) GetDebugProperty を呼び出して、ローカルを含むスタック フレームのすべてのプロパティを表す IDebugProperty2 オブジェクトを取得します。

  2. IDebugStackFrame2::GetDebugPropertyGetMethodProperty を呼び出して、ブレークポイントが発生したメソッドを記述するオブジェクトを取得します。 DE は、シンボル プロバイダー (IDebugSymbolProvider)、アドレス (IDebugAddress)、およびバインダー (IDebugBinder) を提供します。

  3. IDebugExpressionEvaluator::GetMethodProperty 指定した IDebugAddress オブジェクト GetContainerField を呼び出して、指定したアドレスを含むメソッドを表す IDebugContainerField を取得します。

  4. IDebugContainerField インターフェイスは、IDebugMethodField インターフェイスに対して照会されます。 メソッドのローカルへのアクセスを提供するこのインターフェイスです。

  5. IDebugExpressionEvaluator::GetMethodProperty は、メソッドのローカルを表す IDebugProperty2 インターフェイスを実行するクラス (サンプルでは CFieldProperty と呼ばれます) をインスタンス化します。 IDebugMethodField オブジェクトは、IDebugSymbolProviderIDebugAddress、および IDebugBinder オブジェクトと共に、この CFieldProperty オブジェクトに配置されます。

  6. CFieldProperty オブジェクトが初期化されると、IDebugMethodField オブジェクト GetInfo が呼び出され、メソッド自体に関するすべての表示可能な情報を含む FIELD_INFO 構造体が取得されます。

  7. IDebugExpressionEvaluator::GetMethodProperty は、CFieldProperty オブジェクトを IDebugProperty2 オブジェクトとして返します。

  8. Visual Studio は、返された IDebugProperty2 オブジェクト EnumChildren をフィルター guidFilterLocalsPlusArgsで呼び出します。これは、メソッドのローカルを含む IEnumDebugPropertyInfo2 オブジェクトを返します。 この列挙は、EnumLocals および EnumArguments呼び出しによって入力されます。

  9. Visual Studio Next を呼び出して、各ローカルの DEBUG_PROPERTY_INFO 構造を取得します。 この構造体には、ローカルの IDebugProperty2 インターフェイスへのポインターが含まれています。

  10. Visual Studio は、各ローカル GetPropertyInfo を呼び出して、ローカルの名前、値、および型を取得します。 この情報は、ローカル ウィンドウに表示されます。

このセクションの内容

GetMethodProperty を実装する」では、GetMethodProperty の実装について説明します。

ローカルの列挙 デバッグ エンジン (DE) がローカル変数または引数を列挙する呼び出しを行う方法について説明します。

ローカル プロパティの取得、DE が 1 つ以上のローカルの名前、型、および値を取得する呼び出しを行う方法について説明します。

ローカル値を取得、ローカルの値を取得する方法について説明します。ローカルの値を取得するには、評価コンテキストによって指定されたバインダー オブジェクトのサービスが必要です。

ローカルの評価 ローカルの評価方法について説明します。

評価コンテキスト は、DE が式エバリュエーター (EE) を呼び出すときに渡される引数を提供します。

MyCEE サンプル では、MyC 言語の式エバリュエーターを作成するための 1 つの実装アプローチを示します。

関連項目