Threads weergeven in de Visual Studio-debugger (C#, Visual Basic, C++)
Met het venster Threads in het visual Studio-foutopsporingsprogramma kunt u threads onderzoeken en ermee werken in de toepassing die u foutopsporing uitvoert. Het venster bevat functies voor het groeperen, sorteren, markeren, blokkeren, ontdooien en zoeken naar threads in uw code en het weergeven van aanroepstacks.
Het venster Threads is alleen beschikbaar terwijl het Visual Studio-foutopsporingsprogramma wordt uitgevoerd. Tijdens een foutopsporingssessie kunt u het venster openen door Foutopsporing>Windows>Threadste selecteren.
In dit artikel wordt beschreven hoe u kunt werken met het Threads-venster voor uw C#-, Visual Basic- of C++-programma's. Als u stapsgewijze instructies zoekt voor het gebruik van het venster Threads, raadpleegt u Overzicht: Fouten opsporen met behulp van het venster Threads.
De venstertabel Threads verkennen
In het venster Threads wordt een tabel weergegeven waarin elke rij overeenkomt met een afzonderlijke thread in uw toepassing. In de standaardweergave worden in de tabel alle threads in uw toepassing weergegeven. U kunt de tabelinstellingen zo configureren dat alleen de threads worden weergegeven die u interesseren. De tabel bevat meerdere kolommen om de threads gedetailleerd te beschrijven. U kunt de plaatsing van kolommen aanpassen en overbodige kolommen verbergen.
In de volgende tabel worden alle beschikbare kolommen voor de Threads venstertabel beschreven en wordt aangegeven of de kolom zichtbaar of verborgen is in de standaardweergave. De kolommen worden weergegeven op basis van de standaardtabelpositie van links naar rechts.
Kolom | Verstek | Beschrijving |
---|---|---|
vlag toevoegen | Zichtbaar, niet gelabeld | Rode vlaggen in deze kolom geven threads aan die zijn gemarkeerd voor speciale aandacht. Selecteer het vlagpictogram (de pictogramkleur verandert in rood) om een thread te markeren of om de markering op te heffen (pictogram verandert in vlagomtrek). Met het gekleurde vlagpictogram kunt u een gemarkeerde thread onderscheiden van andere threads in de tabel. Zie voor meer informatie Vlaggen en onvlaggen van threads. |
Huidige draad | Zichtbaar, niet gelabeld | Het gele pijlpictogram in deze kolom geeft de huidige thread aan in de toepassing die wordt uitgevoerd in het foutopsporingsprogramma. Een pictogram met een pijlomtrek in deze kolom geeft de huidige debuggercontext voor een niet-actieve thread aan. |
ID | Zichtbaar | Geeft het identificatienummer voor elke thread. |
beheerde id | Zichtbaar | Geeft de beheerde identificatienummers voor beheerde threads weer. |
Categorie | Zichtbaar | Geeft de categorie van threads aan als threads van de gebruikersinterface, handlers voor externe procedureaanroep of werkthreads. Een speciale categorie identificeert de hoofdthread van de toepassing. |
Naam | Zichtbaar | Identificeert elke thread op naam of <Geen naam> als de thread geen opgegeven naam heeft. Wanneer er geen thread meer bestaat, heeft de thread het label [Thread Destroyed]. |
Locatie | Zichtbaar | Hier ziet u waar de thread wordt uitgevoerd in de aanroepstack van de toepassing. Selecteer de vervolgkeuzepijl om de volledige aanroepstack voor de thread weer te geven. Wanneer er geen thread meer bestaat, wordt de locatie gelabeld als <niet beschikbaar>. |
Prioriteit | Verborgen | Geeft de prioriteit of voorrang aan die door het systeem aan elke thread is toegewezen. |
affiniteitsmasker | Verborgen | Toont het masker voor processoraffiniteit voor elke thread. In een multiprocessorsysteem bepaalt het affiniteitsmasker de processors waarop een thread kan worden uitgevoerd. |
Opgeschort aantal | Verborgen | Geeft het geschorste aantal. Dit aantal bepaalt of een thread kan worden uitgevoerd. Zie Threads blokkeren en ontdooienvoor meer informatie. |
procesnaam | Verborgen | Geeft het proces weer waartoe elke thread behoort. De gegevens in deze kolom kunnen handig zijn als u veel processen debugt. |
proces-ID | Verborgen | Toont de proces-id waartoe elke thread behoort. |
Transportkwalificatie | Verborgen | Identificeert op unieke wijze de computer waarmee het foutopsporingsprogramma is verbonden. |
Tabelkolommen weergeven en verbergen
In de werkbalk van het Threads-venster wordt in de vervolgkeuzelijst Kolommen de lijst met beschikbare kolommen weergegeven. Vouw de vervolgkeuzelijst uit en selecteer een kolomnaam om de zichtbaarheid ervan in de tabel in te schakelen. Zichtbare kolommen worden aangegeven met een vinkje in de lijst.
Markeer discussiedraden voor speciale aandacht
Gebruik het vlagpictogram om threads te markeren voor speciale aandacht. Gemarkeerde threads worden aangegeven met een rood vlagpictogram in de Threads venstertabel. Zie Flag and Unflag threadsvoor meer informatie.
Alleen gemarkeerde threads weergeven
U kunt het venster Threads filteren om alleen gemarkeerde threads weer te geven. Selecteer in de werkbalk van het Threads-venster Alleen gemarkeerde threads tonen (pictogram met dubbele vlag). U kunt ook de sneltoets Ctrl + 9 gebruiken. Deze actie is alleen beschikbaar wanneer er gemarkeerde threads zijn.
Schroefdraad blokkeren en ontdooien
Wanneer u een thread blokkeert, wordt de uitvoering van de thread niet gestart, zelfs niet als er resources beschikbaar zijn.
In systeemeigen code kunt u threads onderbreken of hervatten door de Windows-functies SuspendThread
en ResumeThread
aan te roepen. U kunt ook de MFC-functies aanroepen CWinThread::SuspendThread en CWinThread::ResumeThread. Als u de functie SuspendThread
of ResumeThread
aanroept, verandert het onderbroken aantal dat wordt weergegeven in het venster Threads. Het opgeschorte aantal verandert niet als u een systeemeigen thread blokkeert of ontdooit. Een thread kan niet worden uitgevoerd in systeemeigen code, tenzij de thread is ontdooid en een onderbroken telling van nul heeft.
In beheerde code wordt het aantal onderbroken wanneer u een thread blokkeert of ontdooit. Als u een thread in beheerde code bevriest, is het aantal onderbrekingen 1. Wanneer u een thread in systeemeigen code blokkeert, is het onderbroken aantal 0, tenzij u de SuspendThread
aanroep gebruikt.
Notitie
Wanneer u een foutopsporing uitvoert bij een oproep van systeemeigen code naar beheerde code, wordt de beheerde code uitgevoerd in dezelfde fysieke thread als de oproepende systeemeigen code. Het onderbreken of blokkeren van de systeemeigen thread blokkeert ook de beheerde code.
Uitvoering voor geselecteerde threads wijzigen
U kunt de uitvoering van een of meer threads blokkeren of ontdooien. Selecteer in het venster Threads de threads waarvoor u de uitvoeringsstatus wilt bijwerken. Selecteer in de werkbalk van het Threads-venster Draadprocessen blokkeren (pictogram Afspelen onderbreken) of Draadprocessen ontdooien (groen afspeelpictogram). De actie is alleen van toepassing op de geselecteerde threads. De acties blokkeren en ontdooien zijn ook beschikbaar in het contextmenu met de rechtermuisknop voor elke thread.
De huidige thread wijzigen
Een geel pijlpictogram in de Threads venstertabel geeft de huidige thread (en de locatie van de uitvoeringspointer) aan. De oorspronkelijke huidige threadmarkering blijft ook behouden (weergegeven met een pijlkaderpictogram).
Een geel pijlpictogram in de Threads venstertabel geeft de huidige thread (en de locatie van de uitvoeringspointer) aan. Een groen pijlpictogram met een krullende staart geeft aan dat een niet-actieve thread de huidige foutopsporingscontext heeft.
Overschakelen naar een andere thread
Er zijn twee manieren waarop u de huidige thread kunt wijzigen in het foutopsporingsprogramma. Dubbelklik op een thread in de Threads venstertabel om deze de huidige thread te maken. U kunt ook met de rechtermuisknop op een thread klikken en Overschakelen naar threadselecteren.
Groeperen en sorteren toepassen op threads
U kunt threads groeperen in de Threads venstertabel met behulp van dezelfde criteria als de beschikbare kolommen. Alle criteria zijn altijd beschikbaar voor groepering, ongeacht of de bijbehorende kolom zichtbaar is in de huidige weergave. U kunt slechts één groepering voor de tabel selecteren.
Wanneer u threads groepeert, wordt er een kop weergegeven in de tabel voor elke groep. De kop bevat een groepsbeschrijving samen met het aantal leden in de groep. Als u groepeert op Naam, ziet u mogelijk groeperingen met koppen zoals Worker Thread of Niet-gemarkeerde threads. Er wordt een pijlpictogram voor uitvouwen/samenvouwen naast elke groepskop weergegeven.
Nadat u een groepeercriterium hebt toegepast, wordt in de weergave voor de Threads-venstertabel de leden-threads voor elke groep onder hun kopje weergegeven. Gebruik het pictogram pijl uitvouwen/samenvouwen voor een groep om de leden in de huidige weergave weer te geven of te verbergen.
U kunt ook één sorteercriteria toepassen op de threads in de Threads venstertabel. Groepering heeft voorrang op sorteren. U kunt threads bijvoorbeeld groeperen op categorie en ze vervolgens sorteren op id binnen elke categorie.
Threads in de tabel groeperen
Vouw in de werkbalk van het venster Threads de vervolgkeuzelijst Groeperen op uit en selecteer de criteria om de threads te groeperen. U kunt de toegepaste groepering ook verwijderen door Geen te selecteren in de vervolgkeuzelijst Groeperen op.
Sorteer de draadjes in de tabel
U past sorteren toe op threads in de venstertabel Threads door de kolomkoppen bovenaan de tabel te selecteren, zoals Naam of ID.
Wanneer u een kolomkop selecteert, wordt de weergave voor de Threads venstertabel bijgewerkt om de threads weer te geven die zijn gesorteerd op de waarden in de geselecteerde kolom. In de geselecteerde kolom wordt ook een omhoog-/omlaagpijlpictogram weergegeven. Het pictogram pijl-omhoog geeft aan dat er gesorteerd wordt op de geselecteerde kolom in oplopende volgorde. Het pictogram pijl-omlaag geeft sorteren aan op de geselecteerde kolom in aflopende volgorde. Selecteer de kolomkop om de sorteervolgorde te wijzigen.
Threads in groepen sorteren
Als u threads in groepen wilt sorteren in het venster Threads, gebruikt u eerst de vervolgkeuzelijst Groeperen op om de groeperingscriteria toe te passen. Selecteer vervolgens de kolomkop om de gegroepeerde threads te sorteren op de waarden in de geselecteerde kolom.
Alle groepen uitvouwen of samenvouwen
Er is een snelle manier om alle groeperingen in de huidige weergave weer te geven of te verbergen. Selecteer in de werkbalk van het Threads venster Groepen uitvouwen (het dubbelvak-icoon met plusteken) of Groepen samenvouwen (het dubbelvak-icoon met minteken).
Zoeken naar discussies
U kunt de threads zoeken in de Threads venstertabel en specifieke inhoud zoeken in een van de zichtbare tabelkolommen. Wanneer u de zoekopdracht uitvoert, worden in Visual Studio de threadrijen weergegeven met kolomgegevens die overeenkomen met de zoekreeks. De zoekopdracht scant ook de threadlocatie die bovenaan de aanroepstack in de kolom Locatie wordt weergegeven.
Zoeken naar specifieke inhoud in threads
Er zijn verschillende manieren waarop u threads kunt zoeken naar specifieke inhoud. Voer in de vensterwerkbalk Threads de tekenreeks in die u wilt zoeken in het vak Zoeken en selecteer Enter. U kunt letters, cijfers en speciale tekens opgeven, zoals <
in uw zoekreeks. Wanneer de zoekopdracht is voltooid, wordt in het venster Threads de tabel bijgewerkt om threads met overeenkomende resultaten weer te geven. Visual Studio markeert de specifieke exemplaren die overeenkomen met uw zoekreeks. Als u wilt terugkeren naar de normale threadweergave, selecteert u het X-pictogram naast het vak Zoeken.
U kunt ook zoeken naar een term die u eerder hebt opgezocht. Gebruik de vervolgkeuzelijst Zoeken en selecteer een vorige zoekreeks.
Zoeken in de volledige aanroepstack
Standaard wordt de volledige aanroepstack niet doorzocht. Visual Studio zoekt alleen naar een overeenkomst in de threads die zichtbaar zijn in de Threads venstertabel.
U kunt de volledige aanroepstack(s) opnemen door 'Aanroepstacks opnemen in zoekopdrachten' (lijstitempictogram) te selecteren in de werkbalk van het Threads-venster. Wanneer de optie is ingeschakeld, heeft het pictogram van het lijstitem een rand.
Oproepstacks weergeven en schakelen tussen frames
In een programma met meerdere threads heeft elke thread een eigen aanroepstack. Het venster Threads biedt een handige manier om deze stapels weer te geven.
Fooi
Gebruik het venster Parallelle stacks voor een visuele weergave van de aanroepstack voor elke thread.
Aanroepstack van thread weergeven
Zoek in de tabel Threads venster de thread waarvoor u de volledige aanroepstack wilt bekijken. Klik in de kolom Locatie op de pijl uitvouwen/samenvouwen links van de threadlocatie. De locatie wordt uitgebreid om de volledige aanroepstack voor de thread weer te geven. Selecteer de pijl opnieuw om alleen de locatie weer te geven.
Alle aanroepstacks weergeven of samenvouwen
U kunt bepalen of in het venster Threads altijd de volledige aanroepstacks voor alle threads in de tabel worden weergegeven. In de werkbalk van het Threads-venster selecteert u Aanroepstacks uitvouwen (vakpictogram met plusteken) of Aanroepstacks samenvouwen (vakpictogram met minteken).