Delen via


Foutopsporing GPU-code

U kunt fouten opsporen in C++-code die wordt uitgevoerd op de GPU (Graphics Processing Unit). Ondersteuning voor GPU-foutopsporing in Visual Studio omvat racedetectie, het starten van processen en het koppelen ervan, en integratie in de foutopsporingsvensters.

Ondersteunde platforms

Foutopsporing wordt ondersteund in Windows 7, Windows 8, Windows 10, Windows 11, Windows Server 2008 R2, Windows Server 2012 en Windows Server 2016. Voor foutopsporing in de softwareemulator, Windows 8, Windows 10, Windows 11 of Windows Server 2012 is Windows Server 2016 vereist. Voor foutopsporing op de hardware moet u de stuurprogramma's voor uw grafische kaart installeren. Niet alle hardwareleveranciers implementeren alle functies voor foutopsporingsprogramma's. Raadpleeg de documentatie van de leverancier voor beperkingen.

Opmerking

Onafhankelijke hardwareleveranciers die GPU-foutopsporing in Visual Studio willen ondersteunen, moeten een DLL maken die de VSD3DDebug-interface implementeert en die gericht is op hun eigen stuurprogramma's.

Configuratie van GPU-debugging

Het foutopsporingsprogramma kan niet breken op zowel CPU-code als GPU-code in dezelfde app-uitvoering. Standaard pauzeert de debugger bij CPU-code. Als u fouten in GPU-code wilt opsporen, gebruikt u een van de volgende twee stappen:

  • Kies alleen GPU in de lijst Foutopsporingstype op de standaardwerkbalk.

  • Kies Eigenschappen in Solution Explorer in het snelmenu voor het project. Selecteer in het dialoogvenster Eigenschappenpagina's, Foutopsporing, en kies vervolgens Alleen GPU in de lijst Debugger Type.

Toepassingen starten en eraan koppelen

U kunt de Visual Studio-foutopsporingsopdrachten gebruiken om GPU-foutopsporing te starten en te stoppen. Zie Navigeren door code met het foutopsporingsprogramma voor meer informatie. U kunt het GPU-foutopsporingsprogramma ook koppelen aan een actief proces, maar alleen als dat proces GPU-code uitvoert. Zie Koppelen aan actieve processen voor meer informatie.

Uitvoeren van huidige tegel tot aan cursor en uitvoeren tot cursor

Wanneer u de GPU aan het debuggen bent, hebt u twee opties om naar de cursorlocatie te gaan. De opdrachten voor beide opties zijn beschikbaar in het snelmenu van de code-editor.

  1. Met de opdracht Uitvoeren naar cursor wordt uw app uitgevoerd totdat deze de cursorlocatie bereikt en vervolgens wordt verbroken. Dit impliceert niet dat de huidige thread wordt uitgevoerd tot aan de cursor; in plaats daarvan betekent het dat de eerste thread die het cursorpunt bereikt, de pauze activeert. Zie Navigeren door code met het foutopsporingsprogramma

  2. Met de opdracht Huidige tegel uitvoeren naar Cursor wordt uw app uitgevoerd totdat alle threads in de huidige tegel de cursor bereiken en vervolgens worden verbroken.

Debuggen van Windows

Door bepaalde foutopsporingsvensters te gebruiken, kunt u GPU-threads onderzoeken, markeren en blokkeren. Voor meer informatie, zie:

Uitzonderingen voor gegevenssynchronisatie

Het foutopsporingsprogramma kan verschillende voorwaarden voor gegevenssynchronisatie identificeren tijdens de uitvoering. Wanneer een conditie wordt gedetecteerd, schakelt de debugger naar de pauzestand. U hebt twee opties: Onderbreken of Doorgaan. Met behulp van het dialoogvenster Uitzonderingen kunt u configureren of het foutopsporingsprogramma deze voorwaarden detecteert en ook voor welke voorwaarden deze worden onderbroken. Zie Uitzonderingen beheren met het foutopsporingsprogramma voor meer informatie. U kunt ook het dialoogvenster Opties gebruiken om op te geven dat het foutopsporingsprogramma uitzonderingen moet negeren als de geschreven gegevens de waarde van de gegevens niet wijzigen. Zie algemeen, foutopsporing, dialoogvenster Opties voor meer informatie.

Probleemoplossingsproces

Een accelerator opgeven

Onderbrekingspunten in GPU-code worden alleen bereikt als de code wordt uitgevoerd op de accelerator::direct3d_ref (REF) accelerator. Als u geen accelerator in uw code opgeeft, wordt de REF-accelerator automatisch geselecteerd als het type debugging-accelerator in de projecteigenschappen. Als uw code expliciet een accelerator selecteert, wordt de REF-accelerator niet gebruikt tijdens foutopsporing en zullen de onderbrekingspunten niet bereikt worden, tenzij uw GPU-hardware debugondersteuning heeft. U kunt dit oplossen door uw code te schrijven, zodat deze de VERW-accelerator gebruikt tijdens foutopsporing. Zie projecteigenschappen en Accelerator en accelerator_view Objecten en Projectinstellingen gebruiken voor een C++-foutopsporingsconfiguratie voor meer informatie.

Voorwaardelijke onderbrekingspunten

Voorwaardelijke onderbrekingspunten in GPU-code worden ondersteund, maar niet elke expressie kan worden geëvalueerd op het apparaat. Wanneer een expressie niet kan worden geëvalueerd op het apparaat, wordt deze geëvalueerd in het foutopsporingsprogramma. Het foutopsporingsprogramma wordt waarschijnlijk langzamer uitgevoerd dan het apparaat.

Fout: er is een configuratieprobleem met het geselecteerde type foutopsporingsversneller.

Deze fout treedt op wanneer er een inconsistentie is tussen de projectinstellingen en de configuratie van de pc waarop u foutopsporing uitvoert. Zie Projectinstellingen voor een C++ Foutopsporingsconfiguratie voor meer informatie.

Fout: het foutopsporingsstuurprogramma voor het geselecteerde foutopsporingsversnellertype is niet geïnstalleerd op de doelcomputer.

Deze fout treedt op als u foutopsporing op een externe pc uitvoert. Het foutopsporingsprogramma kan pas na runtime bepalen of de stuurprogramma's op de externe pc zijn geïnstalleerd. De stuurprogramma's zijn beschikbaar bij de fabrikant van de grafische kaart.

Fout: Time-outdetectie en -herstel (TDR) moet uitgeschakeld zijn op de externe site.

Het is mogelijk dat C++ AMP-berekeningen het standaardtijdinterval overschrijden dat is ingesteld door het Windows-time-outdetectie- en herstelproces (TDR). Als dat gebeurt, wordt de berekening geannuleerd en gaan de gegevens verloren. Zie TDR's verwerken in C++ AMP voor meer informatie.