Ladění vícevláknových aplikací v sadě Visual Studio
Vlákno je posloupnost instrukcí, kterým operační systém uděluje čas procesoru. Každý proces spuštěný v operačním systému se skládá z alespoň jednoho vlákna. Procesy, které mají více vláken, se nazývají vícevláknové.
Počítače s více procesory, vícejádrovými procesory nebo procesy hyperthreadingu můžou spouštět několik souběžných vláken. Paralelní zpracování pomocí mnoha vláken může výrazně zlepšit výkon programu, ale může také ztížit ladění, protože sledujete mnoho vláken.
Dokonalé paralelní zpracování není vždy možné. Vlákna se někdy musí synchronizovat. Jedno vlákno může muset počkat na výsledek z jiného vlákna nebo jedno vlákno může potřebovat výhradní přístup k prostředku, který používá jiné vlákno. Problémy se synchronizací jsou běžnou příčinou chyb ve vícevláknových aplikacích. Někdy můžou vlákna skončit čekáním na prostředek, který nikdy nebude dostupný. Výsledkem je podmínka s názvem zablokování.
Vlákna a procesy
Vlákna a procesy jsou související koncepty v oblasti počítačových věd. Oba představují posloupnosti instrukcí, které se musí spouštět v určitém pořadí. Instrukce v samostatných vláknech nebo procesech se ale můžou spouštět paralelně.
Procesy existují v operačním systému a odpovídají tomu, co uživatelé vidí jako programy nebo aplikace. Vlákno na druhé straně existuje v rámci procesu. Z tohoto důvodu se vlákna někdy označují jako lehké procesy. Každý proces se skládá z jednoho nebo více vláken.
Existence více procesů umožňuje počítači provádět více než jeden úkol najednou. Existence více vláken umožňuje, aby proces oddělil práci paralelně. Na počítači s víceprocesory mohou procesy nebo vlákna běžet na různých procesorech. To umožňuje skutečné paralelní zpracování.
Nástroje pro ladění vícevláknových aplikací
Visual Studio nabízí různé nástroje pro použití při ladění vícevláknových aplikací.
Pro vlákna jsou primárními nástroji pro ladění vláken okno Vlákna , značky vláken ve zdrojových oknech, okno Paralelní zásobníky , okno Paralelní sledování a panel nástrojů Umístění ladění. Další informace o okně Vlákna a panelu nástrojů Umístění ladění najdete v tématu Návod: Ladění pomocí okna Vlákna. Informace o tom, jak používat okna Paralelní zásobníky a Paralelní kukátky , najdete v tématu Začínáme s laděním vícevláknové aplikace. Obě témata ukazují, jak používat značky vláken.
Pro kód, který používá knihovnu TPL (Task Parallel Library) nebo Concurrency Runtime, jsou primárními nástroji pro ladění okno Paralelní zásobníky , okno Paralelní sledování a okno Úlohy , které také podporuje JavaScript. Chcete-li začít, přečtěte si téma Návod: Ladění paralelní aplikace a návod: Ladění aplikace C++ AMP.
Pro ladění vláken v GPU je primárním nástrojem okno vláken GPU. Viz Postupy: Použití okna vláken GPU.
V případě procesů jsou primárními nástroji dialogové okno Připojit k procesu , okno Procesy a panel nástrojů Umístění ladění.
Visual Studio také poskytuje výkonné zarážky a tracepointy, které můžou být užitečné při ladění vícevláknových aplikací. Pomocí podmínek zarážek a filtrů umístěte zarážky na jednotlivá vlákna. Trasovací body umožňují trasovat provádění programu bez přerušení a studovat problémy, jako jsou zablokování. Další informace najdete v tématu Akce zarážky a tracepointy.
Ladění vícevláknové aplikace s uživatelským rozhraním může být obzvláště obtížné. Můžete zvážit spuštění aplikace na druhém počítači a použití vzdáleného ladění. Další informace naleznete v tématu Vzdálené ladění.
Následující tabulka obsahuje dostupné informace a akce, které můžete provádět na každém z těchto míst:
Uživatelské rozhraní | Dostupné informace | Akce, které můžete provést |
---|---|---|
Dialogové okno Připojit k procesu | Dostupné procesy, ke které se můžete připojit: – Název procesu (.exe) - Číslo ID procesu - Název řádku nabídek - Typ (spravovaný v4.0; Managed v2.0, v1.1, v1.0; x86; x64; IA64) – Uživatelské jméno (název účtu) - Číslo relace |
Vyberte proces, ke který se chcete připojit. Výběr vzdáleného počítače Změna typu přenosu pro připojení ke vzdáleným počítačům |
Okno Procesy | Připojené procesy: – Název procesu - Číslo ID procesu – Cesta ke zpracování .exe - Název řádku nabídek - Stav (přerušení. Spuštěno) – Ladění (nativní, spravované atd.) – Typ přenosu (výchozí, nativní bez ověřování) - Transport kvalifikátor (vzdálený počítač) |
Nástroje: -Připojit -Odpojit -Ukončit Místní nabídka: -Připojit -Odpojit – Odpojení při zastavení ladění -Ukončit |
Okno Vlákna | Vlákna v aktuálním procesu: - ID vlákna – Spravované ID – Kategorie (hlavní vlákno, vlákno rozhraní, obslužná rutina volání vzdálené procedury nebo pracovní vlákno) - Název vlákna - Umístění, kde je vytvořeno vlákno -Prioritou - Maska spřažení - Pozastavený počet – Název procesu - Indikátor příznaku - Pozastavený indikátor |
Nástroje: -Hledat - Search Call Stack - Označit příznakem jen můj kód – Označení vlastního výběru modulu příznakem - Seskupte podle -Sloupce – Rozbalit nebo sbalit bublinové bubliny – Rozbalit nebo sbalit skupiny - Ukotvení/rozmrazování vláken Místní nabídka: - Zobrazit vlákna ve zdroji - Přepnutí na vlákno - Ukotvení spuštěného vlákna - Rozmrazení zmrzlého závitu - Označení vlákna pro další studii - Zrušení označení vlákna – Přejmenování vlákna - Zobrazit a skrýt vlákna Další akce: – Zobrazení zásobníku volání pro vlákno v datovém tipu |
Okno Zdroj | Indikátory vláken v levém hřbetu označují jedno nebo více vláken (ve výchozím nastavení je zapnuté pomocí místní nabídky v okně Vlákna ). | Místní nabídka: - Přepnutí na vlákno - Označení vlákna pro další studii - Zrušení označení vlákna |
Panel nástrojů Umístění ladění | - Aktuální proces - Pozastavit aplikaci - Pokračovat v aplikaci - Pozastavení a vypnutí aplikace - Aktuální vlákno – Přepnutí aktuálního stavu příznaku vlákna – Zobrazit pouze vlákna označená příznakem – Zobrazit pouze aktuální proces - Aktuální rámec zásobníku |
- Přepnutí na jiný proces – Pozastavit, obnovit nebo vypnout aplikaci - Přepnutí na jiné vlákno v aktuálním procesu - Přepnutí na jiný rámec zásobníku v aktuálním vlákně - Označení nebo zrušení označení aktuálních vláken – Zobrazit pouze vlákna označená příznakem – Zobrazí pouze aktuální proces. |
Okno Paralelní zásobníky | - Zásobníky volání pro více vláken v jednom okně. - Aktivní rámec zásobníku pro každé vlákno. - Volající a volaní pro jakoukoli metodu. - Detekce vzájemného zablokování |
- Vyfiltrujte zadaná vlákna. – Vyfiltrujte externí zásobníky kódu. - Přepnutí do zobrazení Úkolů - Označení nebo zrušení označení vlákna -Zoom – Kopírování rámců zásobníku – Uložit/Exportovat všechny zásobníky jako obrázek |
Okno Paralelní kukátko | - Sloupec příznaku, ve kterém můžete označit vlákno, kterému chcete věnovat zvláštní pozornost. - Sloupec s rámečkem, ve kterém šipka označuje vybraný rámec. – Konfigurovatelný sloupec, který může zobrazit počítač, proces, dlaždici, úlohu a vlákno. |
- Označení nebo zrušení označení vlákna – Zobrazit pouze vlákna označená příznakem - Přepínání rámců – Řazení sloupce - Seskupovat vlákna - Ukotvení nebo rozmrazování vláken - export dat v okně Paralelní kukátko |
Okno Úkoly | - Umožňuje zobrazit informace o Task objektech, včetně ID úkolu, stavu úkolu (naplánované, spuštěné, čekání, zablokování) a které vlákno je přiřazeno k úkolu. – Aktuální umístění v zásobníku volání. - Delegát předaný úkolu v době vytvoření |
- Přepnutí na aktuální úkol – Označení příznaku nebo zrušení označení úkolu - Ukotvit nebo rozmrazit úkol |
Okno Vláken GPU | - Sloupec příznaku, ve kterém můžete označit vlákno, kterému chcete věnovat zvláštní pozornost. - Aktuální sloupec vlákna, ve kterém žlutá šipka označuje aktuální vlákno. - Sloupec Počet vláken, který zobrazuje počet vláken na stejném místě. - Sloupec Čára, který zobrazuje řádek kódu, kde se nachází každá skupina vláken. - Sloupec Adresa, který zobrazuje adresu instrukce, kde se nachází každá skupina vláken. - Sloupec Umístění, což je umístění v kódu adresy. – Sloupec Stav , který ukazuje, zda je vlákno aktivní nebo blokováno. – Sloupec Dlaždice , který zobrazuje index dlaždic pro vlákna v řádku. |
- Změna na jiné vlákno - Zobrazení konkrétní dlaždice a vlákna – Zobrazení nebo skrytí sloupce – Seřadit podle sloupce - Seskupovat vlákna - Ukotvení nebo rozmrazování vláken - Označení nebo zrušení označení vlákna – Zobrazit pouze vlákna označená příznakem |