Threads en taken weergeven in het venster Parallelle stacks (C#, Visual Basic, C++)
Het venster Parallelle stacks is handig voor het opsporen van fouten in multithreaded toepassingen. Het heeft verschillende uitzichten.
Threads-weergave toont gespreksstackgegevens voor alle threads in de app. U kunt navigeren tussen threads en stackframes op deze threads.
de taakweergave toont taak-gecentreerde informatie over de call stack.
- In beheerde code worden in weergave Taken aanroepstapels van System.Threading.Tasks.Task-objecten weergegeven.
- In systeemeigen code laat de taken weergave de aanroepstacks zien van taakgroepen, parallelle algoritmen, asynchrone agents, en lichtgewicht taken.
Methodeweergave draait de aanroepstack op een geselecteerde methode.
Het venster Parallelle stacks gebruiken
Als u het venster Parallel Stacks wilt openen, moet u zich in een foutopsporingssessie bevinden. Selecteer Debuggen>Windows>Parallel Stacks.
Werkbalkbedieningen
Het venster Parallelle stacks bevat de volgende werkbalkbesturingselementen:
Icoon | Controle | Beschrijving |
---|---|---|
![]() |
Threads/Tasks keuzelijst met invoervak | Hiermee schakelt u de weergave tussen aanroepstacks van threads en aanroepstacks van taken. Zie takenweergave en Threads-weergavevoor meer informatie. |
![]() |
Alleen gemarkeerd weergeven | Toont aanroepstacks alleen voor de threads die zijn gemarkeerd in andere foutopsporingsprogrammavensters, zoals het venster GPU-threads en het venster Parallel Watch. |
![]() |
Methodeweergave in-/uitschakelen | Schakelen tussen call stack-weergaven en methodeweergave. Zie Methodeweergavevoor meer informatie. |
![]() |
Automatisch naar het huidige stackframe schuiven | Hiermee scrolt de grafiek automatisch zodat het huidige stackframe zichtbaar is. Deze functie is handig wanneer u het huidige stackframe van andere vensters wijzigt of wanneer u een nieuw onderbrekingspunt in grote grafieken bereikt. |
![]() |
Zoombesturing in-/uitschakelen | Hiermee wordt de zoomcontrole links van het venster al dan niet weergeven. Ongeacht de zichtbaarheid van het besturingselement voor zoomen kunt u ook inzoomen door op Ctrl te drukken en het muiswiel te draaien, of door op Ctrl+Shift++ te drukken om in te zoomen en Ctrl+Shift-+- om uit te zoomen. |
Icoon | Controle | Beschrijving |
---|---|---|
![]() |
Threads/Tasks keuzelijst met invoervak | Hiermee schakelt u de weergave tussen aanroepstacks van threads en aanroepstacks van taken. Zie takenweergave en Threads-weergavevoor meer informatie. |
![]() |
Filter Bediening | Toont aanroepstacks alleen voor de specifieke set threads waarin u geïnteresseerd bent. |
![]() |
Alleen gemarkeerd weergeven | Toont aanroepstacks alleen voor de threads die zijn gemarkeerd in andere foutopsporingsprogrammavensters, zoals het venster GPU-threads en het venster Parallel Watch. |
![]() |
Methodeweergave in-/uitschakelen | Schakelen tussen call stack-weergaven en methodeweergave. Zie Methodeweergavevoor meer informatie. |
![]() |
Automatisch naar het huidige stackframe schuiven | Hiermee scrolt de grafiek automatisch zodat het huidige stackframe zichtbaar is. Deze functie is handig wanneer u het huidige stackframe van andere vensters wijzigt of wanneer u een nieuw onderbrekingspunt in grote grafieken bereikt. |
![]() |
Zoombesturing in-/uitschakelen | Hiermee wordt de zoomcontrole links van het venster al dan niet weergeven. Ongeacht de zichtbaarheid van het besturingselement voor zoomen kunt u ook inzoomen door op Ctrl te drukken en het muiswiel te draaien, of door op Ctrl+Shift++ te drukken om in te zoomen en Ctrl+Shift-+- om uit te zoomen. |
![]() |
Zoekbeheer | Met deze functie kunt u eenvoudig door stackframes zoeken en vervolgens pijlen gebruiken om tussen deze resultaten te navigeren. |
![]() |
Besturingselement opslaan | Hiermee kunt u de inhoud uit het parallelle stackvenster opslaan/exporteren als een afbeelding. |
![]() |
Extern codebeheer weergeven | Met deze functie kunt u de stacks uit de externe code/bibliotheken weergeven/verbergen. |
![]() |
Aanroepstacks samenvatten | Vanaf Visual Studio 2022 versie 17.13 Preview 4 kunt u Samenvatten kiezen wanneer Copilot is geïnstalleerd en geactiveerd. Met deze knop opent u het Copilot Chat-venster, vooraf geladen met relevante threadcontext, zodat u details kunt verkennen, waaronder threadstatussen, functieoproepen en voorgestelde oplossingen. |
Pictogrammen voor stackframe
De volgende pictogrammen bevatten informatie over de actieve en huidige stackframes in alle weergaven:
Icoon | Beschrijving |
---|---|
![]() |
Geeft de huidige locatie (actief stackframe) van de huidige thread aan. |
pictogram ![]() |
Geeft de huidige locatie (actief stackframe) van een niet-huidige thread aan. |
![]() |
Hiermee wordt het huidige stackframe (de huidige foutopsporingsprogrammacontext) aangegeven. De naam van de methode is vet, ongeacht waar deze wordt weergegeven. |
Icoon | Beschrijving |
---|---|
![]() |
Geeft de huidige locatie (actief stackframe) van de huidige thread aan. |
pictogram ![]() |
Geeft de huidige locatie (actief stackframe) van een niet-huidige thread aan. |
![]() |
Hiermee wordt het huidige stackframe (de huidige foutopsporingsprogrammacontext) aangegeven. De naam van de methode is vet, ongeacht waar deze wordt weergegeven. |
![]() |
Geeft aan dat het huidige stackframe een status heeft met een kritieke waarschuwing, zoals Deadlock. |
![]() |
Geeft het impasseknooppunt aan. |
![]() |
Geeft aan dat het huidige stackframe aanvullende informatie bevat, zoals Wachten op, Wachten op slot, eigendom van, enzovoort. |
![]() |
Geeft aan dat de huidige taak de status Geblokkeerd/Wachten heeft, enzovoort. |
![]() |
Hiermee wordt de momenteel uitgevoerde taak aangegeven. |
Contextmenu-items
De volgende snelmenu-items zijn beschikbaar wanneer u met de rechtermuisknop op een methode klikt in Threads weergave of Taken weergave. De laatste zes items zijn hetzelfde als in het venster Aanroepstack.
Menu-item | Beschrijving |
---|---|
vlag toevoegen | Hiermee wordt het geselecteerde item gemarkeerd. |
Markering voor verwijderen | Verwijdert de markering van het geselecteerde item. |
bevriezen | Hiermee blokkeert u het geselecteerde item. |
Ontdooien | Hiermee ontdooit u het geselecteerde item. |
Overschakelen Naar Frame | Hetzelfde als de bijbehorende menucommando in het venster Aanroepstack. In het venster Parallel Stacks kan één methode zich echter in verschillende frames bevinden. U kunt het gewenste frame selecteren in het submenu voor dit item. Als een van de stackframes zich op de huidige thread bevindt, wordt dat frame standaard geselecteerd in het submenu. |
Ga naar taak of naar draad | Hiermee schakelt u over naar de weergave Taak of Threads en blijft hetzelfde stackframe gemarkeerd. |
naar broncode gaan | Hiermee gaat u naar de bijbehorende locatie in het broncodevenster. |
ga naar de demontage | U gaat naar de corresponderende locatie in het Disassembly-venster. |
Externe code weergeven | Externe code weergeven of verbergen. |
Hexadecimale Display | Schakelen tussen decimale en hexadecimale weergave. |
Threads in bron weergeven | Markeert de locatie van de thread in het broncodevenster. |
informatie over het laden van symbolen | Hiermee opent u het dialoogvenster Symbool Laadinformatie. |
Symboolinstellingen | Hiermee opent u het dialoogvenster Symboolinstellingen. |
Menu-item | Beschrijving |
---|---|
Kopiëren | Het geselecteerde item kopiëren. |
Selecteer alle frames hieronder | Hiermee selecteert u alle frames onder de geselecteerde stack. |
vlag toevoegen | Hiermee wordt het geselecteerde item gemarkeerd. |
Markering voor verwijderen | Verwijdert de markering van het geselecteerde item. |
bevriezen | Hiermee blokkeert u het geselecteerde item. |
Ontdooien | Hiermee ontdooit u het geselecteerde item. |
Overschakelen Naar Frame | Hetzelfde als de bijbehorende menucommando in het venster Aanroepstack. In het venster Parallel Stacks kan één methode zich echter in verschillende frames bevinden. U kunt het gewenste frame selecteren in het submenu voor dit item. Als een van de stackframes zich op de huidige thread bevindt, wordt dat frame standaard geselecteerd in het submenu. |
Ga naar taak of naar draad | Hiermee schakelt u over naar de weergave Taak of Threads en blijft hetzelfde stackframe gemarkeerd. |
naar broncode gaan | Hiermee gaat u naar de bijbehorende locatie in het broncodevenster. |
ga naar de demontage | U gaat naar de corresponderende locatie in het Disassembly-venster. |
Externe code weergeven | Externe code weergeven of verbergen. |
Hexadecimale Display | Schakelen tussen decimale en hexadecimale weergave. |
Threads in bron weergeven | Markeert de locatie van de thread in het broncodevenster. |
informatie over het laden van symbolen | Hiermee opent u het dialoogvenster Symbool Laadinformatie. |
Symboolinstellingen | Hiermee opent u het dialoogvenster Symboolinstellingen. |
Weergave van threads
In Threads weergave worden het stackframe en het aanroeppad van de huidige thread in het blauw gemarkeerd. De huidige locatie van de thread wordt weergegeven door de gele pijl.
Als u het huidige stackframe wilt wijzigen, dubbelklikt u op een andere methode. Dit kan ook de huidige thread veranderen, afhankelijk van of de methode die u selecteert deel uitmaakt van de huidige thread of een andere thread.
Wanneer de Threads weergavegrafiek te groot is om in het venster te passen, verschijnt een Bird's Eye View besturingselement in het venster. U kunt het frame in het besturingselement verplaatsen om naar verschillende delen van de grafiek te navigeren.
In de volgende afbeelding ziet u één thread die van Main naar een overgang van beheerde naar systeemeigen code gaat. In de huidige methode zijn zes threads actief. Twee threads gaan door naar Thread.Sleep en twee blijven Console.WriteLine en de huidige thread blijft SyncTextWriter.WriteLine gebruiken.
In de volgende tabel worden de belangrijkste functies van de Threads weergave beschreven:
Opmerking | Elementnaam | Beschrijving |
---|---|---|
1 | Aanroepen van stacksegment of knooppunt | Bevat een reeks methoden voor een of meer threads. Als er geen pijllijnen aan het frame zijn gekoppeld, wordt in het frame het volledige oproeppad voor de thread(s) weergegeven. |
2 | Blauwe markering | Geeft het aanroeppad van de huidige thread aan. |
3 | Pijllijnen | Verbind knooppunten om het volledige aanroeppad voor de thread(s) samen te stellen. |
4 | Knooppuntheader | Geeft het aantal processen en threads voor het knooppunt weer. |
5 | Methode | Vertegenwoordigt een of meer stackframes in dezelfde methode. |
6 | Tooltip voor methode | Wordt weergegeven wanneer u de muisaanwijzer over een methode beweegt. In Threads overzicht worden in de tooltip alle threads weergegeven, in een tabel die vergelijkbaar is met het venster Threads. |
In de volgende afbeelding ziet u de hoofdthread in een overgang van beheerde naar systeemeigen code. Vijf threads bevinden zich in de huidige methode. Vier threads blijven draaien in de context van de S.C-methode, terwijl één werkdraad doorgaat in een overgang van beheerde naar systeemeigen code, waarbij de naam op een werkdraad wordt ingesteld.
In de volgende tabel worden de belangrijkste functies van de Threads weergave beschreven:
Opmerking | Elementnaam | Beschrijving |
---|---|---|
1 | Aanroepen van stacksegment of knooppunt | Bevat een reeks methoden voor een of meer threads. Als er geen pijllijnen aan het frame zijn gekoppeld, wordt in het frame het volledige oproeppad voor de thread(s) weergegeven. |
2 | Blauwe markering | Geeft het aanroeppad van de huidige thread aan. |
3 | Pijllijnen | Verbind knooppunten om het volledige aanroeppad voor de thread(s) samen te stellen. |
4 | Knooppuntheader | Toont het aantal processen/threads, de naam van de thread en de thread-id voor het knooppunt. |
5 | Methode | Vertegenwoordigt een of meer stackframes in dezelfde methode. |
6 | Tooltip voor methode | Wordt weergegeven wanneer u de muisaanwijzer over een methode beweegt. In Threads overzicht worden in de tooltip alle threads weergegeven, in een tabel die vergelijkbaar is met het venster Threads. |
7 | Beschrijving van thread | Door AI gegenereerde beschrijving van de thread. Vanaf Visual Studio 2022 versie 17.13 Preview 1 is deze beschrijving aanwezig wanneer Copilot- is geïnstalleerd en geactiveerd. |
Takenoverzicht
Als uw app gebruikmaakt van System.Threading.Tasks.Task objecten (beheerde code) of task_handle
objecten (systeemeigen code) om parallelle uitvoering uit te drukken, kunt u taken weergave gebruiken.
taken weergave toont aanroepstapels van taken in plaats van threads.
In Takenweergave:
- Aanroepstacks van threads die geen taken uitvoeren, worden niet weergegeven.
- Aanroepstacks van threads die taken uitvoeren, worden visueel aan de boven- en onderkant ingekort om de meest relevante taakframes weer te geven.
- Wanneer meerdere taken zich op één thread bevinden, worden de aanroepstacks van deze taken weergegeven in afzonderlijke knooppunten.
Als u een volledige aanroepstack wilt zien, gaat u terug naar Threads weergave door met de rechtermuisknop in een stackframe te klikken en Ga naar Threadte selecteren.
In de volgende afbeelding ziet u de weergave Threads bovenaan en de bijbehorende weergave Taken onderaan.
Beweeg de muisaanwijzer over een methode om een tooltip met aanvullende informatie weer te geven. In weergave Taken worden in de knopinfo alle taken in een tabel weergegeven die vergelijkbaar is met het venster Taken.
In de volgende afbeelding ziet u de tooltip voor een methode in de Threads weergave bovenaan en voor de bijbehorende Taken weergave onderaan.
Methodeweergave
Vanuit de Threads-weergave of Taken-weergave kunt u de grafiek op de huidige methode draaien door het pictogram Methodeweergave in/uit te schakelen op de werkbalk te selecteren. Methodeweergave laat in één oogopslag alle methoden voor alle threads zien die of door de huidige methode worden aangeroepen of de huidige methode aanroepen. In de volgende afbeelding ziet u hoe dezelfde informatie eruitziet in Threads weergave aan de linkerkant en in methodeweergave aan de rechterkant.
Als u overschakelt naar een nieuw stackframe, maakt u die methode de huidige methode en geeft Methodeweergave alle aanroepers en aangeroepen methodes voor de nieuwe methode weer. Dit kan ertoe leiden dat sommige threads zichtbaar worden of uit beeld verdwijnen, afhankelijk van of die methode al dan niet voorkomt in de aanroepstacks. Als u wilt terugkeren naar de aanroepstackweergave, selecteert u het pictogram methodeweergave opnieuw werkbalkpictogram.
Zelfstudie voor het opsporen van fouten in threads en taken met video's met parallelle stacks
In deze videozelfstudies wordt gedemonstreerd hoe u de threads- en takenweergaven van het venster Parallel Stacks in Visual Studio 2022 kunt gebruiken om fouten op te sporen in uw multithreaded-toepassingen.
- Foutopsporingstaken met het venster voor Parallelle Stacks
- Foutopsporing van threads met het venster Parallelle Stacks
Verwante inhoud
- Aan de slag met het opsporen van fouten in een multithreaded-toepassing
- Walkthrough: Fouten opsporen in een parallelle toepassing
- overschakelen naar een andere thread tijdens foutopsporing in Visual Studio
- foutopsporing van beheerde code
- Parallelle programmering
- Het venster Taken gebruiken
- taakklasse