Sledování proměnných pomocí oken kukátek a rychlých kukátek
Při ladění můžete sledovat proměnné a výrazy pomocí oken Kukátek a QuickWatch . Okna jsou k dispozici pouze během ladicí relace.
Okna kukátků můžou během ladění zobrazit několik proměnných najednou. Dialogové okno Rychlé kukátky zobrazuje najednou jednu proměnnou a před pokračováním ladění je nutné ji zavřít. Další informace o používání rychlých kukátek najdete v tématu Sledování jedné proměnné nebo výrazu pomocí quickwatch.
Poznámka:
Pokud jste se poprvé pokusili ladit kód, můžete si před přechodem do tohoto článku přečíst ladění pro absolutní začátečníky a techniky ladění a nástroje .
Sledování proměnných pomocí okna Kukátko
Můžete otevřít více než jedno okno kukátka a sledovat více než jednu proměnnou v okně Kukátko .
Pokud například chcete nastavit kukátku na hodnotách a
, b
a c
v následujícím kódu:
int main()
{
int a, b, c;
a = 1;
b = 2;
c = 0;
for (int i = 0; i < 10; i++)
{
a++;
b *= 2;
c = a + b;
}
return 0;
}
Nastavte zarážku na
c = a + b;
řádku kliknutím na levý okraj, výběrem přepínače ladění>zarážky nebo stisknutím klávesy F9.Spusťte ladění tak, že vyberete zelenou šipku startu nebo> spustíte ladění nebo stisknete klávesu F5. Provádění se pozastaví na zarážce.
Otevřete okno Kukátko tak, že vyberete Ladicí>hodinky Windows>Watch>1 nebo stisknete kombinaci kláves Ctrl+Alt+W>1.
Další okna kukátku můžete otevřít tak, že vyberete okna 2, 3 nebo 4.
V okně Kukátko vyberte prázdný řádek a zadejte proměnnou
a
. Udělejte to samé prob
ac
.Pokračujte v ladění výběrem kroku ladění> nebo stisknutím klávesy F11 podle potřeby. Hodnoty proměnných v okně Kukátko se mění při iteraci smyčky
for
.
Poznámka:
Pouze pro C++
Možná budete muset kvalifikovat kontext názvu proměnné nebo výraz, který používá název proměnné. Kontext je funkce, zdrojový soubor nebo modul, kde se nachází proměnná. Pokud potřebujete kvalifikovat kontext, použijte syntaxi kontextového operátoru (C++) v okně Kukátko.
Názvy registru a názvy proměnných můžete přidat pomocí $<register name> nebo @<register name> do názvu v okně Kukátko . Další informace naleznete v tématu Pseudovariables.
Použití výrazů v okně Kukátko
V okně Kukátko můžete sledovat libovolný platný výraz rozpoznaný ladicím programem.
Například pro kód v předchozí části můžete získat průměr tří hodnot zadáním (a + b + c) / 3
do okna Kukátko :
Pravidla pro vyhodnocování výrazů v okně Kukátko jsou obecně stejná jako pravidla pro vyhodnocování výrazů v jazyce kódu. Pokud má výraz chybu syntaxe, očekává se stejná chyba kompilátoru jako v editoru kódu. Například překlep v předchozím výrazu vygeneruje tuto chybu v okně Kukátko :
V okně Kukátko se může zobrazit kruh se dvěma vlnovkami. Tato ikona znamená, že ladicí program nevyhodnocuje výraz z důvodu potenciální závislosti mezi vlákny. Vyhodnocení kódu vyžaduje, aby se dočasně spouštěly další vlákna ve vaší aplikaci, ale protože jste v režimu přerušení, obvykle se zastaví všechna vlákna v aplikaci. Povolení dočasného spuštění jiných vláken může mít neočekávaný vliv na stav aplikace a ladicí program může ignorovat události, jako jsou zarážky a výjimky v těchto vláknech.
Hledání v okně Kukátko
Pomocí vyhledávacího panelu nad každým oknem můžete hledat klíčová slova ve sloupcích Název, Hodnota a Typ okna Kukátko . Stiskněte ENTER nebo vyberte jednu ze šipek a spusťte hledání. Pokud chcete probíhající hledání zrušit, vyberte na panelu hledání ikonu x.
K procházení nalezených shod použijte šipky vlevo a vpravo (Shift+F3 a F3).
Pokud chcete hledání udělat důkladněji nebo důkladněji, vyberte v horní části okna Kukátko rozevírací seznam Prohledat hlouběji a vyberte, kolik úrovní chcete prohledávat do vnořených objektů.
Připnutí vlastností v okně Kukátko
Poznámka:
Tato funkce je podporovaná v .NET Core 3.0 nebo vyšší.
Objekty můžete rychle zkontrolovat podle jejich vlastností v okně Kukátko pomocí nástroje Připnutelné vlastnosti . Pokud chcete tento nástroj použít, najeďte myší na vlastnost a vyberte ikonu připínáčku, která se zobrazí, nebo klikněte pravým tlačítkem myši a ve výsledné místní nabídce vyberte možnost Připnout člena jako Oblíbené . Tato bublina tuto vlastnost zobrazí na začátek seznamu vlastností objektu a název a hodnota vlastnosti se zobrazí ve sloupci Hodnota . Pokud chcete vlastnost odepnout, vyberte znovu ikonu připnutí nebo v místní nabídce vyberte možnost Odepnout člena jako oblíbený .
Při prohlížení seznamu vlastností v okně Kukátko můžete také přepínat názvy vlastností a odfiltrovat nepřipnuté vlastnosti. K oběma možnostem se dostanete tak, že vyberete tlačítka na panelu nástrojů nad oknem kukátka.
Aktualizace hodnot kukátek
Při vyhodnocování výrazu se může v okně Kukátko zobrazit ikona aktualizace (kruhová šipka). Ikona aktualizace označuje chybu nebo hodnotu, která je zadaná.
Pokud chcete hodnotu aktualizovat, vyberte ikonu aktualizace nebo stiskněte mezerník. Ladicí program se pokusí výraz znovu vyhodnotit. V závislosti na tom, proč se hodnota nevyhodnotila, ale možná nechcete ani nebudete moct výraz znovu vyhodnotit.
Najeďte myší na ikonu aktualizace nebo zobrazte sloupec Hodnota z důvodu, proč se výraz nevyhodnotil. Mezi důvody patří:
Při vyhodnocování výrazu došlo k chybě, stejně jako v předchozím příkladu. Může dojít k vypršení časového limitu nebo může být proměnná mimo rozsah.
Výraz má volání funkce, které by mohlo v aplikaci aktivovat vedlejší efekt. Viz vedlejší účinky výrazu.
Automatické vyhodnocení vlastností a implicitních volání funkcí je zakázané.
Pokud se zobrazí ikona aktualizace, protože automatické vyhodnocení vlastností a implicitních volání funkcí je zakázané, můžete ji povolit výběrem možnosti Povolit vyhodnocení vlastností a další implicitní volání funkcí v >>nástrojích Ladění>Obecné.
Předvedení pomocí ikony aktualizace:
V nástrojích>Možnosti>ladění>Obecné zrušte zaškrtnutí políčka Povolit vyhodnocení vlastnosti a další implicitní volání funkce.
Zadejte následující kód a v okně Kukátko nastavte kukátko na
list.Count
vlastnost.static void Main(string[] args) { List<string> list = new List<string>(); list.Add("hello"); list.Add("goodbye"); }
Spuštění ladění Okno Kukátko zobrazuje něco jako následující zpráva:
Pokud chcete hodnotu aktualizovat, vyberte ikonu aktualizace nebo stiskněte mezerník. Ladicí program výraz znovu vyhodnocuje.
Vedlejší efekty výrazu
Vyhodnocení některých výrazů může změnit hodnotu proměnné nebo jinak ovlivnit stav vaší aplikace. Například vyhodnocením následujícího výrazu se změní hodnota var1
:
var1 = var2
Tento kód může způsobit vedlejší účinek. Vedlejší účinky můžou ztížit ladění změnou způsobu, jakým vaše aplikace funguje.
Výraz s vedlejšími účinky se vyhodnotí pouze jednou, když ho poprvé zadáte. Potom se výraz zobrazí šedě v okně Kukátko a další vyhodnocení se zakáže. Sloupec Popis nebo Hodnota vysvětluje, že výraz způsobuje vedlejší efekt. Opětovné hodnocení můžete vynutit tak, že vyberete ikonu aktualizace, která se zobrazí vedle hodnoty.
Jedním ze způsobů, jak zabránit označení vedlejších účinků, je vypnout automatické vyhodnocení funkce. V nástrojích>Možnosti>ladění>Obecné, zrušte výběr Povolit vyhodnocení vlastnosti a další implicitní volání funkce.
Pouze v případě, že je vypnuté vyhodnocení vlastností nebo implicitních volání funkcí, můžete vyhodnocení vynutit přidáním modifikátoru ac formátu do proměnné Name v okně Kukátko. Viz specifikátory formátu v jazyce C#.
Použití ID objektů v okně Kukátko (C# a Visual Basic)
Někdy chcete sledovat chování konkrétního objektu. Můžete například chtít sledovat objekt, na který odkazuje místní proměnná poté, co tato proměnná zmizela z rozsahu. V jazyce C# a Visual Basic můžete vytvořit ID objektů pro konkrétní instance referenčních typů a použít je v okně Kukátko a v zarážkách. ID objektu je generováno ladicí službou CLR (Common Language Runtime) a přidruženou k objektu.
Poznámka:
ID objektů vytvářejí slabé odkazy, které nezabrání uvolnění paměti objektu. Jsou platné pouze pro aktuální ladicí relaci.
V následujícím kódu MakePerson()
metoda vytvoří Person
pomocí místní proměnné:
class Person
{
public Person(string name)
{
Name = name;
}
public string Name { get; set; }
}
public class Program
{
static List<Person> _people = new List<Person>();
public static void Main(string[] args)
{
MakePerson();
DoSomething();
}
private static void MakePerson()
{
var p = new Person("Bob");
_people.Add(p);
}
private static void DoSomething()
{
// more processing
Console.WriteLine("done");
}
}
Pokud chcete zjistit název Person
v metodě, můžete přidat odkaz na Person
ID objektu v okně KukátkoDoSomething()
.
Po vytvoření objektu
Person
nastavte zarážku v kódu.Spuštění ladění
Když se provádění pozastaví na zarážce, otevřete okno Místní hodnoty tak, že zvolíte Ladit>místní prostředí Windows.>
V okně Místní hodnoty klikněte pravým tlačítkem myši na
Person
proměnnou a vyberte Vytvořit ID objektu.V okně Místní hodnoty byste měli vidět znak dolaru ($) plus číslo, což je ID objektu.
Id objektu přidejte do okna Kukátko tak, že kliknete pravým tlačítkem na ID objektu a vyberete Přidat kukátko.
Nastavte jinou zarážku v
DoSomething()
metodě.Pokračujte v ladění. Když se provádění v
DoSomething()
metodě pozastaví, okno Kukátko zobrazíPerson
objekt.Poznámka:
Chcete-li zobrazit vlastnosti objektu, například
Person.Name
, musíte povolit vyhodnocení vlastnosti výběrem nástroje>Možnosti>ladění>obecné>povolení vyhodnocení vlastnosti a další implicitní volání funkce.
Dynamické zobrazení a okno Kukátko
Některé skriptovací jazyky (například JavaScript nebo Python) používají dynamické nebo kachní psaní a .NET verze 4.0 a novější podporují objekty, které jsou obtížně sledovatelné v normálních oknech ladění.
Okno Kukátko zobrazí tyto objekty jako dynamické objekty, které jsou vytvořeny z typů, které implementují IDynamicMetaObjectProvider rozhraní. Uzly dynamického objektu zobrazují dynamické členy dynamických objektů, ale neumožňují úpravy hodnot členů.
Pokud chcete aktualizovat hodnoty dynamického zobrazení , vyberte ikonu aktualizace vedle uzlu dynamického objektu.
Chcete-li zobrazit pouze dynamické zobrazení objektu, přidejte za název dynamického objektu v okně Kukátko specifikátor dynamického formátu:
- Pro jazyk C#:
ObjectName, dynamic
- Pro Visual Basic:
$dynamic, ObjectName
Poznámka:
- Ladicí program jazyka C# při kroku na další řádek kódu automaticky nepřehodnotuje hodnoty v dynamickém zobrazení .
- Ladicí program jazyka Visual Basic automaticky aktualizuje výrazy přidané prostřednictvím dynamického zobrazení.
- Vyhodnocení členů dynamického zobrazení může mít vedlejší účinky.
Vložení nové proměnné kukátku, která přetypuje objekt na dynamický objekt:
- Klikněte pravým tlačítkem na libovolné podřízené položky dynamického zobrazení.
- Zvolte Přidat kukátku. Stane se
object.name
((dynamic) object).name
a zobrazí se v novém okně Kukátko .
Ladicí program také přidá podřízený uzel dynamického zobrazení objektu do okna Automatické položky . Pokud chcete otevřít okno Automatické položky, vyberte během ladění možnost Ladit>automatické operace systému Windows.>
Dynamické zobrazení také vylepšuje ladění objektů MODELU COM. Když se ladicí program dostane k objektu COM zabaleného v System.__ComObject, přidá pro objekt uzel dynamického zobrazení .
Sledování jedné proměnné nebo výrazu pomocí quickwatch
Pomocí rychlých kukátek můžete sledovat jednu proměnnou.
Například pro následující kód:
static void Main(string[] args)
{
int a, b;
a = 1;
b = 2;
for (int i = 0; i < 10; i++)
{
a = a + b;
}
}
Pokud chcete sledovat proměnnou a
,
Nastavte zarážku na
a = a + b;
řádku.Spuštění ladění Provádění se pozastaví na zarážce.
Vyberte proměnnou
a
v kódu.Vyberte Ladit>rychlé hodinky, stiskněte Shift+F9 nebo klikněte pravým tlačítkem myši a vyberte QuickWatch.
Zobrazí se dialogové okno QuickWatch . Proměnná
a
je v poli Výraz s hodnotou 1.Pokud chcete výraz vyhodnotit pomocí proměnné, zadejte výraz, například
a + b
do pole Výraz, a vyberte Znovu vyhodnotit.Pokud chcete přidat proměnnou nebo výraz z QuickWatch do okna Kukátko, vyberte Přidat kukátko.
Výběrem možnosti Zavřít zavřete okno QuickWatch . (QuickWatch je modální dialog, takže nemůžete pokračovat v ladění, pokud je otevřený.)
Pokračujte v ladění. Proměnnou můžete sledovat v okně Kukátko .