Udostępnij za pośrednictwem


Architektura ewaluatora wyrażeń

Ważne

W programie Visual Studio 2015 ten sposób implementowania ewaluatorów wyrażeń jest przestarzały. Aby uzyskać informacje na temat implementowania ewaluatorów wyrażeń CLR, zobacz clR expression evaluators and Managed expression evaluator sample (Przykład ewaluatora wyrażeń zarządzanych).

Zintegrowanie zastrzeżonego języka z pakietem debugowania programu Visual Studio oznacza, że należy skonfigurować wymagane interfejsy ewaluatora wyrażeń (EE) i wywołać dostawcę symboli czasu wykonywania języka wspólnego (SP) i interfejsy binder. Obiekty sp i binder wraz z bieżącym adresem wykonywania są kontekstem, w którym są obliczane wyrażenia. Informacje, które te interfejsy tworzą i wykorzystują, reprezentują kluczowe pojęcia w architekturze środowiska EE.

Analizowanie wyrażenia

Podczas debugowania programu wyrażenia są oceniane z wielu powodów, ale zawsze, gdy debugowany program został zatrzymany w punkcie przerwania (punkt przerwania umieszczony przez użytkownika lub taki, który został spowodowany wyjątkiem). W tej chwili program Visual Studio uzyskuje ramkę stosu reprezentowaną przez interfejs IDebugStackFrame2 z aparatu debugowania (DE). Następnie program Visual Studio wywołuje metodę GetExpressionContext, aby uzyskać interfejs IDebugExpressionContext2. Ten interfejs reprezentuje kontekst, w którym można ocenić wyrażenia; ParseText to punkt wejścia do procesu oceny. Do tego momentu wszystkie interfejsy są implementowane przez de.

Po IDebugExpressionContext2::ParseText wywołaniu de tworzy wystąpienie EE skojarzone z językiem pliku źródłowego, w którym wystąpił punkt przerwania (de tworzy wystąpienie sh w tym momencie). EE jest reprezentowana przez interfejs IDebugExpressionEvaluator . De następnie wywołuje metodę Parse , aby przekonwertować wyrażenie (w postaci tekstowej) na wyrażenie przeanalizowane gotowe do oceny. To przeanalizowane wyrażenie jest reprezentowane przez interfejs IDebugParsedExpression . Wyrażenie jest zwykle analizowane i nie jest oceniane w tym momencie.

De tworzy obiekt, który implementuje interfejs IDebugExpression2 , umieszcza IDebugParsedExpression obiekt w IDebugExpression2 obiekcie i zwraca IDebugExpression2 obiekt z IDebugExpressionContext2::ParseTextklasy .

Ocena wyrażenia

Program Visual Studio wywołuje metodę EvaluateSync lub EvaluateAsync , aby ocenić przeanalizowane wyrażenie. Obie te metody wywołają metodę EvaluateSync (IDebugExpression2::EvaluateSyncwywołuje metodę natychmiast, podczas gdy IDebugExpression2::EvaluateAsync wywołuje metodę za pośrednictwem wątku w tle), aby ocenić przeanalizowane wyrażenie i zwrócić interfejs IDebugProperty2, który reprezentuje wartość i typ przeanalizowanego wyrażenia. IDebugParsedExpression::EvaluateSync używa dostarczonego sh, adresu i binder, aby przekonwertować przeanalizowane wyrażenie na rzeczywistą wartość reprezentowaną przez IDebugProperty2 interfejs.

Na przykład

Gdy punkt przerwania zostanie trafiony w uruchomionym programie, użytkownik zdecyduje się wyświetlić zmienną w oknie dialogowym QuickWatch . To okno dialogowe zawiera nazwę zmiennej, jej wartość i typ. Użytkownik zazwyczaj może zmienić wartość.

Po wyświetleniu okna dialogowego QuickWatch nazwa badanej zmiennej jest wysyłana jako tekst do elementu ParseText. Spowoduje to zwrócenie obiektu IDebugExpression2 reprezentującego wyrażenie przeanalizowane, w tym przypadku zmienną . Funkcja EvaluateSync jest następnie wywoływana w celu utworzenia IDebugProperty2 obiektu reprezentującego wartość i typ zmiennej, a także jego nazwę. Są to wyświetlane informacje.

Jeśli użytkownik zmieni wartość zmiennej, funkcja SetValueAsString jest wywoływana z nową wartością, która zmienia wartość zmiennej w pamięci, aby była używana po wznowieniu działania programu.

Aby uzyskać więcej informacji na temat tego procesu wyświetlania wartości zmiennych, zobacz Wyświetlanie ustawień lokalnych . Aby uzyskać więcej informacji na temat zmiany wartości zmiennej, zobacz Zmienianie wartości lokalnej .

W tym obszarze

Kontekst oceny zawiera argumenty przekazywane, gdy de wywołuje EE.

Interfejsy ewaluatora wyrażeń kluczowych opisują kluczowe interfejsy potrzebne podczas pisania środowiska EE wraz z kontekstem oceny.