Fouten opsporen met behulp van het Just-In-Time Debugger in Visual Studio
Just-In-Time foutopsporing kan Visual Studio automatisch starten wanneer een app buiten Visual Studio wordt uitgevoerd en er fouten of crashes optreden. Met Just-In-Time foutopsporing kunt u apps buiten Visual Studio testen en Visual Studio openen om te beginnen met foutopsporing wanneer er een probleem optreedt.
Just-In-Time foutopsporing werkt voor Windows-bureaublad-apps. Het werkt niet voor Universele Windows-apps of voor beheerde code die wordt gehost in een systeemeigen toepassing, zoals Visualizers.
Fooi
Als u wilt voorkomen dat het Just-In-Time Debugger dialoogvenster verschijnt, maar u hebt Visual Studio niet geïnstalleerd, zie Just-In-Time Debugger uitschakelen. Als u Visual Studio eenmaal hebt geïnstalleerd, moet u mogelijk Just-In-Time foutopsporing uitschakelen vanuit het Windows-register.
Just-In-Time foutopsporing in Visual Studio in- of uitschakelen
U kunt Just-In-Time foutopsporing configureren vanuit het dialoogvenster Visual Studio Hulpmiddelen>Opties (of Foutopsporing>Opties).
Notitie
Als u Just-In-Time foutopsporing wilt in- of uitschakelen, moet u Visual Studio als beheerder uitvoeren. Als u Just-In-Time foutopsporing inschakelt of uitschakelt, wordt een registersleutel ingesteld en zijn beheerdersbevoegdheden mogelijk vereist om die sleutel te wijzigen. Als u Visual Studio als beheerder wilt openen, klikt u met de rechtermuisknop op de Visual Studio-app en kiest u Als administrator uitvoeren.
Just-In-Time foutopsporing in- of uitschakelen:
Selecteer in het menu Extra of het menu Foutopsporing de Opties>Foutopsporing>Just-In-Time.
Notitie
Als de just-In-Time menuoptie niet wordt weergegeven, controleert u of het Just-In-Time foutopsporingsprogramma is geïnstalleerd met behulp van het Visual Studio-installatieprogramma.
Selecteer in het vak Just-In-Time foutopsporing inschakelen voor deze typen code welke typen van code Just-In-Time foutopsporing moet debuggen: Managed, Nativeen/of Script.
Selecteer OK-.
Als u het Just-In-Time foutopsporingsprogramma inschakelt, maar het niet opent wanneer een app vastloopt of een fout optreedt, raadpleegt u Problemen met Just-In-Time foutopsporingoplossen.
Just-In-Time foutopsporing uitschakelen vanuit het Windows-register
Just-In-Time foutopsporing is mogelijk nog steeds ingeschakeld, zelfs als Visual Studio niet meer op uw computer is geïnstalleerd. Als Visual Studio niet meer is geïnstalleerd, kunt u Just-In-Time foutopsporing uitschakelen door het Windows-register te bewerken.
Just-In-Time foutopsporing uitschakelen door het register te bewerken:
Voer in het Windows Startmenu de Register-Editor (regedit.exe) uit.
Zoek en verwijder in het venster Register-editor de volgende registervermeldingen als deze bestaan:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
Verwijder ook de volgende registervermeldingen als deze bestaan:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
Zorg ervoor dat u geen andere registersleutels verwijdert of wijzigt.
Sluit het venster Register-editor.
Just-In-Time foutopsporing van een Windows-formulier inschakelen
Windows Form-apps hebben standaard een uitzonderingshandler op het hoogste niveau waarmee de app blijft werken als deze kan worden hersteld. Als een Windows Forms-app een niet-verwerkte uitzondering genereert, wordt het volgende dialoogvenster weergegeven:
Als u Just-In-Time foutopsporing wilt inschakelen in plaats van standaard foutafhandeling van Windows-formulieren, voegt u deze instellingen toe:
Stel in de sectie
system.windows.forms
van het machine.config- of <-app-naam>.exe.config-bestand dejitDebugging
-waarde in optrue
.<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Stel in een C++ Windows-formuliertoepassing ook
DebuggableAttribute
in optrue
in een .config bestand of in uw code. Als u compileert met /Zi en zonder /Og, stelt de compiler dit kenmerk voor u in. Als u echter fouten wilt opsporen in een niet-geoptimaliseerde release-build, moet uDebuggableAttribute
instellen door de volgende regel toe te voegen aan het AssemblyInfo.cpp-bestand van uw app:[assembly:System::Diagnostics::DebuggableAttribute(true, true)];
Zie DebuggableAttributevoor meer informatie.
Just-In-Time-foutopsporing gebruiken
In dit voorbeeld wordt u begeleid bij Just-In-Time foutopsporing wanneer een app een fout genereert.
Visual Studio moet zijn geïnstalleerd om deze stappen uit te voeren. Als u Visual Studio niet hebt, kunt u de gratis Visual Studio Community Edition downloaden.
Zorg ervoor dat Just-In-Time foutopsporing ingeschakeld is in Extra>Opties>Foutopsporing>Just-In-Time.
In dit voorbeeld maakt u een C#-console-app in Visual Studio die een NullReferenceExceptiongenereert.
Maak in Visual Studio een C#-console-app (File>New>Project>Visual C#>Console Application) met de naam ThrowsNullException. Zie Walkthrough: Een eenvoudige toepassing makenvoor meer informatie over het maken van projecten in Visual Studio.
Wanneer het project wordt geopend in Visual Studio, opent u het Program.cs-bestand. Vervang de Methode Main() door de volgende code, waarmee een regel naar de console wordt afgedrukt en vervolgens een NullReferenceException wordt geretourneerd:
static void Main(string[] args) { Console.WriteLine("we will now throw a NullReferenceException"); throw new NullReferenceException("this is the exception thrown by the console app"); }
Om de oplossing te bouwen, kiest u de Debug (standaard) of de Release-configuratie en selecteert u vervolgens Build>Rebuild Solution.
Notitie
- Kies Debug-configuratie voor de volledige foutopsporingservaring.
- Als u configuratie release selecteert, moet u Just My Code uitschakelen om deze procedure te laten werken. Schakel onder Extra>Opties>Foutopsporingde optie Just My Codeuit.
Voor meer informatie over het begrijpen van buildconfiguraties, zie Informatie over buildconfiguraties.
Open de gebouwde app ThrowsNullException.exe in de map van uw C#-project (...\ThrowsNullException\ThrowsNullException\bin\Debug of ...\ThrowsNullException\ThrowsNullException\bin\Release).
U ziet nu het volgende opdrachtvenster:
Het dialoogvenster Just-DebuggerIn-Time kiezen wordt geopend.
Selecteer onder Beschikbare foutopsporingsprogramma'sNieuwe instantie van <de gewenste Visual Studio-versie/-editie>, als deze nog niet is geselecteerd.
Selecteer OK-.
Het Project ThrowsNullException wordt geopend in een nieuw exemplaar van Visual Studio, waarbij de uitvoering is gestopt op de regel die de uitzondering heeft veroorzaakt:
U kunt op dit moment beginnen met foutopsporing. Als u fouten in een echte app opspoort, moet u erachter komen waarom de code de uitzondering genereert.
Voorzichtigheid
Als uw app niet-vertrouwde code bevat, wordt er een dialoogvenster met beveiligingswaarschuwingen weergegeven, zodat u kunt bepalen of u wilt doorgaan met foutopsporing. Voordat u doorgaat met foutopsporing, moet u beslissen of u de code vertrouwt. Hebt u de code zelf geschreven? Als de toepassing wordt uitgevoerd op een externe computer, herkent u de naam van het proces? Als de app lokaal wordt uitgevoerd, overweeg dan de mogelijkheid dat er schadelijke code op uw computer wordt uitgevoerd. Als u besluit dat de code betrouwbaar is, selecteert u OK. Selecteer anders Annuleren.
Problemen met Just-In-Time foutopsporing oplossen
Als Just-In-Time foutopsporing niet start wanneer een app vastloopt, ook al is deze ingeschakeld in Visual Studio:
Een bekend Windows-probleem kan ertoe leiden dat het Just-In-Time foutopsporingsprogramma mislukt.
De oplossing is het toevoegen van een DWORD-waarde van Auto, met waardegegevens van 1, aan de volgende registersleutels:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
(Voor 32-bits apps op 64-bits machines) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
Windows Foutrapportage kan de foutafhandeling op uw computer overnemen.
U kunt dit probleem oplossen door de Register-editor te gebruiken om een DWORD-waarde van Uitgeschakeld, met waardegegevens van 1, aan de volgende registersleutels toe te voegen:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
(Voor 32-bits apps op 64-bits machines) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting
Mogelijk ziet u de volgende foutberichten tijdens Just-In-Time foutopsporing:
Kan niet verbinden met het vastgelopen proces. Het opgegeven programma is geen Windows- of MS-DOS-programma.
Het foutopsporingsprogramma heeft geprobeerd een proces te koppelen dat wordt uitgevoerd onder een andere gebruiker.
Als u dit probleem wilt omzeilen, opent u in Visual Studio Foutopsporing>Koppelen aan proces (of drukt u op Ctrl + Alt + P) en zoekt u het proces dat u wilt opsporen in de lijst met beschikbare processen. Als u de naam van het proces niet weet, zoekt u de proces-id in het dialoogvenster Visual Studio Just-In-Time Foutopsporingsprogramma. Selecteer het proces in de lijst Beschikbare processen en selecteer bijvoegen. Selecteer Geen om het Just-In-Time-foutopsporingsdialoogvenster te sluiten.
foutopsporingsprogramma kan niet worden gestart omdat er geen gebruiker is aangemeld.
Er is geen gebruiker aangemeld bij de console, dus er is geen gebruikerssessie om het dialoogvenster Just-In-Time foutopsporing weer te geven.
Meld u aan bij de computer om dit probleem op te lossen.
klasse is niet geregistreerd.
Het foutopsporingsprogramma heeft geprobeerd een COM-klasse te maken die niet is geregistreerd, waarschijnlijk vanwege een installatieprobleem.
Als u dit probleem wilt oplossen, gebruikt u het Installatieprogramma van Visual Studio om uw Visual Studio-installatie opnieuw te installeren of te herstellen.
Verwante inhoud
- Debuggerbeveiliging
- Bekijk eerst het foutopsporingsprogramma
- Opties, Foutopsporing,In-Time Dialoogvenster
- Beveiligingswaarschuwing: het koppelen aan een proces dat eigendom is van een niet-vertrouwde gebruiker kan gevaarlijk zijn. Als de volgende informatie er verdacht uitziet of als u het niet zeker weet, verbindt u zich niet met dit proces.