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 zprostředkovatel symbolů běhu (SP) a rozhraní pořadače společného jazyka. Objekty SP a pořadače společně s aktuální adresou spuštění jsou kontextem, ve kterém se výrazy vyhodnocují. 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 program laděný program zastavený na zarážce (zarážka umístěná uživatelem nebo zarážka způsobená výjimkou). V tuto chvíli sada Visual Studio získá rámec zásobníku, který představuje rozhraní IDebugStackFrame2 z ladicího modulu (DE). Visual Studio pak volá GetExpressionContext získat IDebugExpressionContext2 rozhraní. Toto rozhraní představuje kontext, ve kterém lze výrazy vyhodnotit; ParseText je vstupním bodem procesu vyhodnocení. Až do tohoto okamžiku se de implementují všechna rozhraní.

Při IDebugExpressionContext2::ParseText zavolání 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ří instanci sh). EE je reprezentován IDebugExpressionEvaluator rozhraní. Funkce DE pak zavolá parsování a převede výraz (v textové podobě) na analyzovaný výraz připravený k vyhodnocení. Tento analyzovaný výraz je reprezentován IDebugParsedExpression rozhraní. 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 pomocí zadaného sh, adresy a pořadače převede analyzovaný výraz na skutečnou hodnotu reprezentovanou rozhraním IDebugProperty2 .

Například

Po dosažení zarážky v běžícím 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 změně hodnoty proměnné najdete v tématu Změna hodnoty místního prostředí.

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í.