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::ParseText
klasy .
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::EvaluateSync
wywoł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.