Sdílet prostřednictvím


Architektura vyhodnocovače výrazů

Důležité

V sadě Visual Studio 2015 je tento způsob implementace vyhodnocovačů výrazů zastaralý. Informace o implementaci vyhodnocovačů výrazů CLR najdete v tématu vyhodnocovače výrazů CLR a ukázka vyhodnocovače spravovaných výrazů.

Integrace proprietárního jazyka do ladicího balíčku sady Visual Studio znamená, že musíte nastavit požadovaná rozhraní vyhodnocovače výrazů (EE) a volat rozhraní zprostředkovatele symbolů běhového prostředí společného jazyka (SP) a rozhraní vazby. Objekty SP a binder, spolu s aktuální adresou spuštění, tvoří kontext, ve kterém se vyhodnocují výrazy. Informace, které tato rozhraní vytvářejí a využívají, představují klíčové koncepty v architektuře EE.

Parsování výrazu

Při ladění programu se výrazy vyhodnocují z několika důvodů, ale vždy, když byl laděný program zastavený na zarážce (umístěné uživatelem nebo způsobené výjimkou). V tento okamžik Visual Studio získává rámec zásobníku představovaný rozhraním IDebugStackFrame2 z ladicího modulu (DE). Visual Studio pak volá GetExpressionContext, aby získalo rozhraní IDebugExpressionContext2. Toto rozhraní představuje kontext, ve kterém lze výrazy vyhodnotit; ParseText je vstupním bodem procesu vyhodnocení. Až do tohoto okamžiku jsou všechna rozhraní implementována DE.

Při volání IDebugExpressionContext2::ParseText DE vytvoří instanci EE přidruženou k jazyku zdrojového souboru, ve kterém došlo k zarážce (DE v tomto okamžiku vytvoří i instanci SH). EE je reprezentován rozhraním IDebugExpressionEvaluator. DE pak zavolá Parse pro převod výrazu (v textové podobě) na zpracovaný výraz, připravený k vyhodnocení. Tento analyzovaný výraz je reprezentován prostřednictvím rozhraní IDebugParsedExpression. Výraz se obvykle parsuje a v tomto okamžiku se nevyhodnocuje.

DE vytvoří objekt, který implementuje IDebugExpression2 rozhraní, umístí IDebugParsedExpression objekt do objektu IDebugExpression2 a vrátí IDebugExpression2 objekt z IDebugExpressionContext2::ParseText.

Vyhodnocení výrazu

Visual Studio volá buď EvaluateSync , nebo EvaluateAsync k vyhodnocení analyzovaného výrazu. Obě tyto metody volají EvaluateSync (IDebugExpression2::EvaluateSync volá metodu okamžitě, zatímco IDebugExpression2::EvaluateAsync volá metodu prostřednictvím vlákna na pozadí) k vyhodnocení parsovaného výrazu a vrácení rozhraní IDebugProperty2 , které představuje hodnotu a typ analyzovaného výrazu. IDebugParsedExpression::EvaluateSync s využitím zadaného SH, adresy a svázání převede analyzovaný výraz na skutečnou hodnotu, kterou reprezentuje rozhraní IDebugProperty2.

Například

Po dosažení zarážky za běhu programu se uživatel rozhodne zobrazit proměnnou v dialogovém okně QuickWatch. Toto dialogové okno zobrazuje název proměnné, jeho hodnotu a typ. Uživatel může obvykle změnit hodnotu.

Po zobrazení dialogového okna QuickWatch se název zkoumané proměnné odešle jako text do funkce ParseText. Vrátí IDebugExpression2 objekt představující parsovaný výraz, v tomto případě proměnnou. Funkce EvaluateSync se pak volá k vytvoření objektu IDebugProperty2 , který představuje hodnotu a typ proměnné a také jeho název. Zobrazí se tyto informace.

Pokud uživatel změní hodnotu proměnné, Je volána SetValueAsString s novou hodnotou, která změní hodnotu proměnné v paměti, aby se použila při spuštění programu.

Další podrobnosti o tomto procesu zobrazení hodnot proměnných najdete v tématu Zobrazení místních hodnot. Další podrobnosti o tom, jak je změněna hodnota proměnné, najdete v části Změna hodnoty místní proměnné.

V této části

Kontext vyhodnocení poskytuje argumenty, které se předávají při volání EE DE.

Rozhraní vyhodnocovače klíčových výrazů popisují klíčová rozhraní potřebná při psaní EE spolu s kontextem vyhodnocení.