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