Zobrazení vláken a úloh v okně Paralelní zásobníky (C#, Visual Basic, C++)
Okno Paralelní zásobníky je užitečné pro ladění vícevláknových aplikací. Má několik zobrazení:
Zobrazení vláken zobrazuje informace o zásobníku volání pro všechna vlákna v aplikaci. Mezi vlákny a rámečky zásobníku můžete na těchto vláknech přecházet.
Zobrazení úkolů zobrazuje informace o zásobníku volání na střed úkolů.
- Zobrazení Úkoly ve spravovaném kódu zobrazuje zásobníky System.Threading.Tasks.Task volání objektů.
- Zobrazení Úlohy v nativním kódu zobrazuje zásobníky volání skupin úloh, paralelních algoritmů, asynchronních agentů a jednoduchých úloh.
Použití okna Paralelní zásobníky
Pokud chcete otevřít okno Paralelní zásobníky , musíte být v relaci ladění. Vyberte Ladit>paralelní zásobníky Windows.>
Ovládací prvky panelu nástrojů
Okno Paralelní zásobníky obsahuje následující ovládací prvky panelu nástrojů:
Ikona | Control | Popis |
---|---|---|
Pole se seznamem Úkoly vláken/ | Přepne zobrazení mezi zásobníky volání vláken a zásobníky volání úloh. Další informace naleznete v části Zobrazení úkolů a Zobrazení Vláken. | |
Zobrazit pouze příznak | Zobrazuje zásobníky volání pouze pro vlákna označená v jiných oknech ladicího programu, jako je okno Vlákna GPU a okno Paralelní kukátko . | |
Přepnout zobrazení metody | Přepíná mezi zobrazeními zásobníku volání a zobrazením metody. Další informace naleznete v tématu Zobrazení metody. | |
Automatické posouvání na aktuální rámec zásobníku | Automaticky zapisuje graf tak, aby aktuální rámec zásobníku byl v zobrazení. Tato funkce je užitečná, když změníte aktuální rámec zásobníku z jiných oken nebo když ve velkých grafech dosáhnete nové zarážky. | |
Přepnout ovládací prvek lupy | Zobrazí nebo skryje ovládací prvek lupy vlevo od okna. Bez ohledu na viditelnost ovládacího prvku lupy můžete také přiblížit stisknutím kláves Ctrl a otáčením kolečka myši nebo stisknutím kombinace kláves Ctrl+Shift++ a oddálením kombinace kláves Ctrl+Shift.+- |
Ikona | Control | Popis |
---|---|---|
Pole se seznamem Úkoly vláken/ | Přepne zobrazení mezi zásobníky volání vláken a zásobníky volání úloh. Další informace naleznete v části Zobrazení úkolů a Zobrazení Vláken. | |
Ovládací prvek filtru | Zobrazuje zásobníky volání pouze pro konkrétní sadu vláken, která vás zajímají. | |
Zobrazit pouze příznak | Zobrazuje zásobníky volání pouze pro vlákna označená v jiných oknech ladicího programu, jako je okno Vlákna GPU a okno Paralelní kukátko . | |
Přepnout zobrazení metody | Přepíná mezi zobrazeními zásobníku volání a zobrazením metody. Další informace naleznete v tématu Zobrazení metody. | |
Automatické posouvání na aktuální rámec zásobníku | Automaticky zapisuje graf tak, aby aktuální rámec zásobníku byl v zobrazení. Tato funkce je užitečná, když změníte aktuální rámec zásobníku z jiných oken nebo když ve velkých grafech dosáhnete nové zarážky. | |
Přepnout ovládací prvek lupy | Zobrazí nebo skryje ovládací prvek lupy vlevo od okna. Bez ohledu na viditelnost ovládacího prvku lupy můžete také přiblížit stisknutím kláves Ctrl a otáčením kolečka myši nebo stisknutím kombinace kláves Ctrl+Shift++ a oddálením kombinace kláves Ctrl+Shift.+- |
|
Ovládací prvek hledání | Pomocí této funkce můžete snadno prohledávat snímky zásobníku a pak pomocí šipek přecházet mezi těmito výsledky. | |
Uložit ovládací prvek | Umožňuje uložit nebo exportovat obsah z okna paralelního zásobníku jako obrázek. | |
Zobrazit externí ovládací prvek kódu | Pomocí této funkce můžete zobrazit nebo skrýt zásobníky z externího kódu nebo knihoven. |
Ikony s rámečkem zásobníku
Následující ikony poskytují informace o aktivních a aktuálních rámcích zásobníku ve všech zobrazeních:
Ikona | Popis |
---|---|
Určuje aktuální umístění (aktivní rámec zásobníku) aktuálního vlákna. | |
Označuje aktuální umístění (aktivní rámec zásobníku) ne aktuálního vlákna. | |
Označuje aktuální rámec zásobníku (kontext aktuálního ladicího programu). Název metody je tučný, kdekoli se zobrazí. |
Ikona | Popis |
---|---|
Určuje aktuální umístění (aktivní rámec zásobníku) aktuálního vlákna. | |
Označuje aktuální umístění (aktivní rámec zásobníku) ne aktuálního vlákna. | |
Označuje aktuální rámec zásobníku (kontext aktuálního ladicího programu). Název metody je tučný, kdekoli se zobrazí. | |
Označuje, že aktuální rámec zásobníku má upozornění na kritický stav, například zablokování. | |
Označuje uzel zablokovaný. | |
Označuje, že aktuální rámec zásobníku obsahuje další informace, jako je čekání na, čekání na uzamčení, vlastnictví atd. | |
Označuje, že aktuální úkol je v blokované nebo čekající stavu atd. | |
Označuje, že aktuálně spuštěná úloha. |
Položky místní nabídky
Následující položky místní nabídky jsou k dispozici, když kliknete pravým tlačítkem myši na metodu v zobrazení vláken nebo v zobrazení Úlohy . Posledních šest položek je stejné jako v okně Zásobník volání.
Položka nabídky | Popis |
---|---|
Parametr | Označí vybranou položku příznakem. |
Zrušit označení | Zruší označení vybrané položky. |
Zmrazit | Zablokuje vybranou položku. |
Tání | Roztáčí vybranou položku. |
Přepnout na rámec | Stejné jako odpovídající příkaz nabídky v okně Zásobník volání. V okně Paralelní zásobníky však může být jedna metoda v několika rámcích. V podnabídce této položky můžete vybrat požadovaný rámec. Pokud je jeden z rámců zásobníku v aktuálním vlákně, je tento rámec ve výchozím nastavení vybrán v podnabídce. |
Přejít na úlohu nebo přejít na vlákno | Přepne do zobrazení Úloh nebo vláken a zachová stejný rámec zásobníku zvýrazněný. |
Přejít na zdrojový kód | Přejde do odpovídajícího umístění v okně zdrojového kódu. |
Přejít na zpětný překlad | Přejde do odpovídajícího umístění v okně Zpětné překladu . |
Zobrazit externí kód | Zobrazí nebo skryje externí kód. |
Šestnáctkové zobrazení | Přepíná mezi desetinným a šestnáctkovým displejem. |
Zobrazit vlákna ve zdroji | Označí umístění vlákna v okně zdrojového kódu. |
Informace o načtení symbolu | Otevře dialogové okno Informace o načtení symbolu. |
Nastavení symbolů | Otevře dialogové okno Symbol Nastavení. |
Položka nabídky | Popis |
---|---|
Kopírování | Zkopírujte vybranou položku. |
Vyberte všechny rámce níže. | Vybere všechny rámce ve vybraném zásobníku. |
Parametr | Označí vybranou položku příznakem. |
Zrušit označení | Zruší označení vybrané položky. |
Zmrazit | Zablokuje vybranou položku. |
Tání | Roztáčí vybranou položku. |
Přepnout na rámec | Stejné jako odpovídající příkaz nabídky v okně Zásobník volání. V okně Paralelní zásobníky však může být jedna metoda v několika rámcích. V podnabídce této položky můžete vybrat požadovaný rámec. Pokud je jeden z rámců zásobníku v aktuálním vlákně, je tento rámec ve výchozím nastavení vybrán v podnabídce. |
Přejít na úlohu nebo přejít na vlákno | Přepne do zobrazení Úloh nebo vláken a zachová stejný rámec zásobníku zvýrazněný. |
Přejít na zdrojový kód | Přejde do odpovídajícího umístění v okně zdrojového kódu. |
Přejít na zpětný překlad | Přejde do odpovídajícího umístění v okně Zpětné překladu . |
Zobrazit externí kód | Zobrazí nebo skryje externí kód. |
Šestnáctkové zobrazení | Přepíná mezi desetinným a šestnáctkovým displejem. |
Zobrazit vlákna ve zdroji | Označí umístění vlákna v okně zdrojového kódu. |
Informace o načtení symbolu | Otevře dialogové okno Informace o načtení symbolu. |
Nastavení symbolů | Otevře dialogové okno Symbol Nastavení. |
zobrazení vláken
V zobrazení Vlákna jsou rámeček zásobníku a cesta volání aktuálního vlákna zvýrazněny modře. Aktuální umístění vlákna je zobrazeno žlutou šipkou.
Pokud chcete změnit aktuální rámec zásobníku, poklikejte na jinou metodu. To může také přepnout aktuální vlákno v závislosti na tom, zda je zvolená metoda součástí aktuálního vlákna nebo jiného vlákna.
Pokud je graf zobrazení Vláken příliš velký, aby se nevešel do okna, zobrazí se v okně ovládací prvek Bird's Eye View. Rámeček v ovládacím prvku můžete přesunout a přejít do různých částí grafu.
Následující obrázek ukazuje jedno vlákno, které přechází z main na přechod spravovaného kódu do nativního kódu. V aktuální metodě je šest vláken. Jeden pokračuje do Thread.Sleep a druhý pokračuje na Console.WriteLine a pak na SyncTextWriter.WriteLine.
Následující tabulka popisuje hlavní funkce zobrazení Vláken :
Popisek | Název prvku | Popis |
---|---|---|
1 | Segment zásobníku volání nebo uzel | Obsahuje řadu metod pro jedno nebo více vláken. Pokud rámec neobsahuje žádné čáry šipek, zobrazí se v rámci celá cesta volání pro vlákna. |
2 | Modré zvýraznění | Označuje cestu volání aktuálního vlákna. |
3 | Šipkové čáry | Připojení uzly, které tvoří celou cestu volání pro vlákna. |
4 | Hlavička uzlu | Zobrazuje počet procesů a vláken pro uzel. |
5 | metoda | Představuje jeden nebo více rámců zásobníku ve stejné metodě. |
6 | Popis metody | Zobrazí se, když najedete myší na metodu. V zobrazení Vlákna se v popisu zobrazí všechna vlákna v tabulce podobné okně Vlákna . |
Následující obrázek ukazuje jedno vlákno, které přechází z main na přechod spravovaného kódu do nativního kódu. V aktuální metodě je pět vláken. Jeden pokračuje na ServerClass.InstanceMethod a druhý pokračuje na Worker.Thread.Start a pak na StartupHook.Initialize.AnonymousMethod.
Následující tabulka popisuje hlavní funkce zobrazení Vláken :
Popisek | Název prvku | Popis |
---|---|---|
1 | Segment zásobníku volání nebo uzel | Obsahuje řadu metod pro jedno nebo více vláken. Pokud rámec neobsahuje žádné čáry šipek, zobrazí se v rámci celá cesta volání pro vlákna. |
2 | Modré zvýraznění | Označuje cestu volání aktuálního vlákna. |
3 | Šipkové čáry | Připojení uzly, které tvoří celou cestu volání pro vlákna. |
4 | Hlavička uzlu | Zobrazuje počet procesů/vláken, název vlákna a ID vlákna pro uzel. |
5 | metoda | Představuje jeden nebo více rámců zásobníku ve stejné metodě. |
6 | Popis metody | Zobrazí se, když najedete myší na metodu. V zobrazení Vlákna se v popisu zobrazí všechna vlákna v tabulce podobné okně Vlákna . |
Zobrazení úkolů
Pokud vaše aplikace k vyjádření paralelismu používá System.Threading.Tasks.Task objekty (spravovaný kód) nebo task_handle
objekty (nativní kód), můžete použít zobrazení Úkoly . Zobrazení Úkolů zobrazuje zásobníky volání úloh místo vláken.
V zobrazení Úkoly :
- Zásobníky volání vláken, které nejsou spuštěné úkoly, se nezobrazují.
- Zásobníky volání vláken, které spouští úlohy, jsou vizuálně oříznuty v horní a dolní části, aby se zobrazily nejrelevantní rámce pro úlohy.
- Pokud je na jednom vlákně několik úkolů, zobrazí se zásobníky volání těchto úloh v samostatných uzlech.
Pokud chcete zobrazit celý zásobník volání, přepněte zpět do zobrazení Vláken tak, že kliknete pravým tlačítkem na rámeček zásobníku a vyberete Přejít na vlákno.
Následující obrázek znázorňuje zobrazení Vláken v horní části a odpovídající zobrazení Úkolů v dolní části.
Najeďte myší na metodu a zobrazte popis s dalšími informacemi. V zobrazení Úkoly se v popisu zobrazují všechny úkoly v tabulce podobné okně Úkoly .
Následující obrázek ukazuje popis pro metodu v zobrazení Vlákna v horní části a pro odpovídající zobrazení Tasks v dolní části.
Zobrazení metody
V zobrazení Vláken nebo v zobrazení Úlohy můžete graf aktuální metody překlopit výběrem ikony Přepnout zobrazení metody na panelu nástrojů. Zobrazení metody ukazuje na první pohled všechny metody ve všech vláknech, které volají nebo jsou volány aktuální metodou. Následující obrázek ukazuje, jak stejné informace vypadají v zobrazení Vlákna vlevo a v zobrazení metody vpravo.
Pokud přepnete na nový rámec zásobníku, nastavíte tuto metodu jako aktuální metodu a zobrazení metody zobrazí všechny volající a volané pro novou metodu. To může způsobit, že se některá vlákna zobrazí nebo zmizí ze zobrazení v závislosti na tom, jestli se tato metoda zobrazí ve svých zásobníkech volání. Pokud se chcete vrátit do zobrazení zásobníku volání, znovu vyberte ikonu panelu nástrojů Zobrazení metody.
Videokurz ladění vláken a úloh pomocí paralelních zásobníků
Tyto videokurzy ukazují, jak můžete pomocí zobrazení Vláken a úkolů okna Paralelní zásobníky v sadě Visual Studio 2022 ladit vícevláknové aplikace.