ウォッチ ウィンドウ式の評価
重要
Visual Studio 2015 では、この方法での式エバリュエーターの実装は非推奨です。 CLR 式エバリュエーターの実装については、CLR 式エバリュエーターに関する記事とマネージド式エバリュエーターのサンプルに関する記事をご覧ください。
実行が一時停止すると、Visual Studio によって、デバッグ エンジン (DE) が呼び出され、ウォッチ リスト内の各式の現在の値が判断されます。 DE では、式エバリュエーター (EE) を使用して各式が評価され、Visual Studio によって [ウォッチ] ウィンドウにその値が表示されます。
ウォッチ リスト式の評価方法の概要を次に示します。
Visual Studio によって、DE の GetExpressionContext が呼び出されて、式の評価に使用できる式のコンテキストが取得されます。
ウォッチ リスト内の式ごとに、Visual Studio によって Parsetext が呼び出されて、式のテキストが解析済みの式に変換されます。
IDebugExpressionContext2::ParseText
では、Parse が呼び出され、テキストの解析の実際の作業が行われ、IDebugParsedExpression オブジェクトが生成されます。IDebugExpressionContext2::ParseText
では、IDebugExpression2 オブジェクトが作成され、IDebugParsedExpression
オブジェクトがそれに格納されます。 その後、このIDebugExpression2
オブジェクトが Visual Studio に返されます。Visual Studio によって EvaluateSync が呼び出され、解析済みの式が評価されます。
IDebugExpression2::EvaluateSync
によって、EvaluateSync への呼び出しが渡されて、実際の評価が行われ、Visual Studio に返されるIDebugProperty2 オブジェクトが生成されます。Visual Studio によって GetPropertyInfo が呼び出され、ウォッチ リストに表示される式の値が取得されます。
解析して評価する
複雑な式の解析はその評価よりもかなり長くかかる可能性があるため、式を評価するプロセスは、1) 式の解析と、2) 解析済みの式の評価という 2 つのステップに分けられます。 このように、評価は何回でも実行できますが、式の解析は 1 回だけにする必要があります。 中間解析済みの式が、IDebugParsedExpression オブジェクトの EE から返され、このオブジェクトはカプセル化され、DE から IDebugExpression2 オブジェクトとして返されます。 IDebugExpression
オブジェクトでは、すべての評価を IDebugParsedExpression
オブジェクトに委ねます。
Note
Visual Studio で想定されていても、EE では必ずしもこの 2 ステップのプロセスに従う必要はありません。EE では、EvaluateSync が呼び出されたときと同じ手順で解析し、評価することができます (たとえば、これは MyCEE サンプルの動作です)。 言語で複雑な式を作成できる場合は、解析手順を評価手順から分離することができます。 これにより、多くのウォッチ式が表示されているときに、Visual Studio のデバッガーのパフォーマンスが向上する可能性があります。
このセクションの内容
「式の評価のサンプル実装」では、MyCEE サンプルを使用して、式の評価のプロセスをステップ実行します。
「ウォッチ式の評価」では、式が正常に解析された後の動作について説明します。
関連するコンテンツ
「評価コンテキスト」では、デバッグ エンジン (DE) によって式エバリュエーター (EE) が呼び出されるときに渡される引数を示します。