Delen via


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:

  1. Selecteer in het menu Extra of het menu Foutopsporing de Opties>Foutopsporing>Just-In-Time.

    JIT-foutopsporing in- of uitschakelen

    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.

  2. 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.

  3. 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:

  1. Voer in het Windows Startmenu de Register-Editor (regedit.exe) uit.

  2. 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

    JIT-registersleutel

  3. 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.

  4. 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:

niet-verwerkte uitzondering voor Windows Form

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 de jitDebugging-waarde in op true.

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  • Stel in een C++ Windows-formuliertoepassing ook DebuggableAttribute in op true 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 u DebuggableAttribute 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.

In dit voorbeeld maakt u een C#-console-app in Visual Studio die een NullReferenceExceptiongenereert.

  1. 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.

  2. 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");
    }
    
  3. 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.

  4. 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:

    Schermopname van de console voor ThrowsNullException.exe, waarmee een niet-verwerkte null-verwijzingsuitzondering (System.NullReferenceException) wordt gegenereerd.

  5. Het dialoogvenster Just-DebuggerIn-Time kiezen wordt geopend.

    Schermopname van het dialoogvenster 'Kies Just-In-Time Foutopsporingsprogramma', dat verschijnt nadat de uitzondering optreedt in het ThrowsNullException.exe consolevenster.

    Selecteer onder Beschikbare foutopsporingsprogramma'sNieuwe instantie van <de gewenste Visual Studio-versie/-editie>, als deze nog niet is geselecteerd.

  6. 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:

    Schermopname van het project ThrowsNullException in Visual Studio, met markering van de regel broncode 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

    Zie voor meer informatie. WER-instellingen.

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.