Freigeben über


Debuggen mithilfe des Just-In-Time Debuggers in Visual Studio

Beim Just-In-Time-Debuggen kann Visual Studio automatisch gestartet werden, wenn Fehler oder ein Absturz in einer App auftreten, die außerhalb von Visual Studio ausgeführt wird. Mit just-In-Time Debugging können Sie Apps außerhalb von Visual Studio testen und Visual Studio öffnen, um mit dem Debuggen zu beginnen, wenn ein Problem auftritt.

Just-In-Time Debugging funktioniert für Windows-Desktop-Apps. Es funktioniert nicht für universelle Windows-Apps oder für verwalteten Code, der in einer systemeigenen Anwendung gehostet wird, z. B. Visualizer.

Tipp

Wenn das Dialogfeld „Just-in-Time-Debugger“ nicht mehr angezeigt werden soll, Visual Studio jedoch nicht installiert ist, finden Sie weitere Informationen unter Deaktivieren des Just-in-Time-Debuggers. Wenn Visual Studio deinstalliert wurde, müssen Sie möglicherweise Just-in-Time-Debuggen über die Windows-Registrierung deaktivieren.

Aktivieren oder Deaktivieren von Just-In-Time Debugging in Visual Studio

Sie können Just-in-Time-Debuggen im Visual Studio-Dialogfeld Extras>Optionen (oder Debuggen>Optionen) konfigurieren.

Anmerkung

Um just-In-Time Debugging zu aktivieren oder zu deaktivieren, müssen Sie Visual Studio als Administrator ausführen. Zum Aktivieren oder Deaktivieren von Just-In-Time Debugging wird ein Registrierungsschlüssel gesetzt, und möglicherweise sind Administratorrechte erforderlich, um diesen Schlüssel zu ändern. Um Visual Studio als Administrator zu öffnen, klicken Sie mit der rechten Maustaste auf die Visual Studio-App, und wählen Sie Als Administrator ausführenaus.

So aktivieren oder deaktivieren Sie Just-In-Time-Debuggen:

  1. Wählen Sie im Menü Werkzeuge oder Debug die Optionen>Debugging>Just-In-Timeaus.

    JIT-Debugging aktivieren oder deaktivieren

    Anmerkung

    Wenn die Menüoption Just-In-Time nicht angezeigt wird, stellen Sie sicher, dass der Just-In-Time Debugger mithilfe des Visual Studio Installer installiert ist.

  2. Wählen Sie im Feld Just-in-Time-Debuggen für diese Codetypen aktivieren die Codetypen aus, auf die Just-in-Time-Debuggen angewendet werden soll: Verwaltet, Nativ und/oder Skript.

  3. Wählen Sie OKaus.

Wenn Sie den Just-in-Time-Debugger aktivieren, dieser jedoch nicht geöffnet wird, wenn eine App abstürzt oder Fehler in ihr auftreten, finden Sie weitere Informationen unter Problembehandlung beim Just-in-Time-Debuggen.

Just-In-Time Debugging aus der Windows-Registrierung deaktivieren

Just-In-Time Debugging ist möglicherweise weiterhin aktiviert, auch wenn Visual Studio nicht mehr auf Ihrem Computer installiert ist. Wenn Visual Studio nicht mehr installiert ist, können Sie just-In-Time Debugging deaktivieren, indem Sie die Windows-Registrierung bearbeiten.

So deaktivieren Sie Just-In-Time-Debugging durch Bearbeiten der Registry:

  1. Führen Sie im Windows Startmenü den Registrierungs-Editor (regedit.exe) aus.

  2. Suchen und löschen Sie im Fenster Registrierungs-Editor die folgenden Registrierungseinträge, falls vorhanden:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    JIT-Registrierungsschlüssel

  3. Löschen Sie auch die folgenden Registrierungseinträge, falls vorhanden:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    Stellen Sie sicher, dass Sie keine anderen Registrierungsschlüssel löschen oder ändern.

  4. Schließen Sie das Fenster Registrierungs-Editor.

Aktivieren Sie Just-In-Time-Debugging von Windows-Formularen

Standardmäßig verfügen Windows Form-Apps über einen Ausnahmehandler der obersten Ebene, mit dem die App weiterhin ausgeführt werden kann, wenn sie wiederhergestellt werden kann. Wenn eine Windows Forms-App eine unbehandelte Ausnahme auslöst, wird das folgende Dialogfeld angezeigt:

Ausnahmefehler in Windows Forms

Um just-In-Time Debugging anstelle der standardmäßigen Windows Form-Fehlerbehandlung zu aktivieren, fügen Sie die folgenden Einstellungen hinzu:

  • Legen Sie im Abschnitt system.windows.forms der Datei machine.config oder <App-Name>.exe.config den Wert jitDebugging auf true fest:

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  • Legen Sie in einer C++-Windows Form-Anwendung auch DebuggableAttribute auf true in einer .config Datei oder in Ihrem Code fest. Wenn Sie mit /Zi und ohne /Ogkompilieren, legt der Compiler dieses Attribut für Sie fest. Wenn Sie jedoch einen nicht optimierten Releasebuild debuggen möchten, müssen Sie DebuggableAttribute festlegen, indem Sie die folgende Zeile in der AssemblyInfo.cpp Datei Ihrer App hinzufügen:

    [assembly:System::Diagnostics::DebuggableAttribute(true, true)];
    

    Weitere Informationen finden Sie unter DebuggableAttribute.

Verwenden von Just-In-Time-Debuggen

In diesem Beispiel wird Ihnen Just-In-Time-Debugging erklärt, wenn eine App einen Fehler auslöst.

  • Sie müssen Visual Studio installiert haben, um die folgenden Schritte auszuführen. Wenn Sie nicht über Visual Studio verfügen, können Sie die kostenlose Visual Studio Community Editionherunterladen.

  • Stellen Sie sicher, dass Just-In-Time-Debuggen in Extras>Optionen>Debuggen>Just-In-Time aktiviert ist.

In diesem Beispiel erstellen Sie eine C#-Konsolen-App in Visual Studio, die eine NullReferenceException-auslöst.

  1. Erstellen Sie in Visual Studio eine C#-Konsolen-App (File>New>Project>Visual C#>Console Application) mit dem Namen ThrowsNullException. Weitere Informationen zum Erstellen von Projekten in Visual Studio finden Sie unter Walkthrough: Create a simple application.

  2. Wenn das Projekt in Visual Studio geöffnet wird, öffnen Sie die Program.cs Datei. Ersetzen Sie die Main()-Methode durch den folgenden Code, der eine Zeile in der Konsole druckt, und löst dann eine NullReferenceException aus:

    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. Wählen Sie zum Erstellen der Projektmappe entweder die Konfiguration Debuggen (Standard) oder Release aus, und wählen Sie dann Build>Projektmappe neu erstellen aus.

    Anmerkung

    • Wählen Sie die Debug Konfigurationseinstellung für ein vollständiges Debuggerlebnis aus.
    • Wenn Sie die Release-Konfiguration auswählen, müssen Sie Just My Code deaktivieren, damit dieses Verfahren funktioniert. Deaktivieren Sie unter Extras>Optionen>Debuggen die Option Nur eigenen Code aktivieren.

    Weitere Informationen zu Buildkonfigurationen finden Sie unter Grundlegendes zu Buildkonfigurationen.

  4. Öffnen Sie die integrierte App ThrowsNullException.exe in Ihrem C#-Projektordner (...\ThrowsNullException\ThrowsNullException\bin\Debug oder ...\ThrowsNullException\ThrowsNullException\bin\Release).

    Das folgende Befehlsfenster sollte angezeigt werden:

    Screenshot der Konsole für „ThrowsNullException.exe“, die einen NULL-Verweisausnahmefehler auslöst (System.NullReferenceException)

  5. Das Dialogfeld Just-in-Time-Debugger auswählen wird geöffnet.

    Screenshot des Dialogfelds „Just-in-Time-Debugger auswählen“, das angezeigt wird, nachdem die Ausnahme im Konsolenfenster von „ThrowsNullException.exe“ angezeigt wurde

    Wählen Sie unter Verfügbare Debugger die Option Neue Instanz von <Ihre bevorzugte Visual Studio-Version/Edition> aus, sofern diese nicht bereits ausgewählt ist.

  6. Wählen Sie OKaus.

    Das ThrowsNullException-Projekt wird in einer neuen Instanz von Visual Studio geöffnet, wobei die Ausführung an der Zeile beendet wurde, die die Ausnahme ausgelöst hat:

    Screenshot des ThrowsNullException-Projekts in Visual Studio mit Hervorhebung der Quellcodezeile, die die Ausnahme ausgelöst hat.

Sie können an diesem Punkt mit dem Debuggen beginnen. Wenn Sie eine echte App debuggen, müssen Sie herausfinden, warum der Code die Ausnahme auslöst.

Vorsicht

Wenn Ihre App nicht vertrauenswürdigen Code enthält, wird ein Sicherheitswarnungsdialogfeld angezeigt, in dem Sie entscheiden können, ob sie mit dem Debuggen fortfahren möchten. Bevor Sie mit dem Debuggen fortfahren, entscheiden Sie, ob Sie dem Code vertrauen. Haben Sie den Code selbst geschrieben? Wenn die Anwendung auf einem Remotecomputer ausgeführt wird, erkennen Sie den Namen des Prozesses? Wenn die App lokal ausgeführt wird, sollten Sie die Möglichkeit berücksichtigen, dass bösartiger Code auf Ihrem Computer ausgeführt wird. Wenn Sie entscheiden, dass der Code vertrauenswürdig ist, wählen Sie OKaus. Wählen Sie andernfalls Abbrechen aus.

Problembehandlung beim Just-In-Time-Debuggen

Wenn das Just-In-Time-Debugging nicht startet, wenn eine App abstürzt, obwohl es in Visual Studio aktiviert ist:

  • Ein bekanntes Windows-Problem kann dazu führen, dass der Just-In-Time Debugger fehlschlägt.

    Sie beheben das Problem, indem Sie den folgenden Registrierungsschlüsseln einen auf DWORD-Wert von Auto mit auf Wertdaten von 1 hinzufügen:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

    • (Für 32-Bit-Apps auf 64-Bit-Computern) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

  • Die Windows-Fehlerberichterstattung kann die Fehlerbehandlung auf Ihrem Computer übernehmen.

    Um dieses Problem zu beheben, fügen Sie im Registrierungs-Editor den folgenden Registrierungsschlüsseln den auf Deaktiviert festgelegten DWORD-Wert mit auf 1 festgelegten Wertdaten hinzu:

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting

    • (Für 32-Bit-Apps auf 64-Bit-Computern) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting

    Weitere Informationen finden Sie unter .WER-Einstellungen.

Während des Just-In-Time-Debuggings werden möglicherweise die folgenden Fehlermeldungen angezeigt:

  • An den abstürzenden Prozess kann nicht angehängt werden. Das angegebene Programm ist kein Windows- oder MS-DOS-Programm.

    Der Debugger hat versucht, einen Prozess anzufügen, der unter einem anderen Benutzer ausgeführt wird.

    Um dieses Problem zu umgehen, öffnen Sie in Visual Studio Debuggen>An den Prozess anhängen (oder drücken Sie Ctrl + Alt + P), und suchen Sie den Prozess, den Sie debuggen möchten, in der Liste Verfügbare Prozesse. Wenn Sie den Namen des Prozesses nicht kennen, suchen Sie die Prozess-ID im Dialogfeld Visual Studio Just-In-Time Debugger. Wählen Sie den Prozess in der Liste Verfügbare Prozesse aus, und wählen Sie Anfügen aus. Wählen Sie Nein aus, um das Dialogfeld „Just-in-Time-Debugger“ zu schließen.

  • Debugger konnte nicht gestartet werden, da kein Benutzer angemeldet ist.

    Es ist kein Benutzer bei der Konsole angemeldet, sodass keine Benutzersitzung zum Anzeigen des Dialogfelds "Just-In-Time Debugging" vorhanden ist.

    Melden Sie sich an der Maschine an, um dieses Problem zu beheben.

  • Klasse nicht registriert.

    Der Debugger hat versucht, eine COM-Klasse zu erstellen, die nicht registriert ist, wahrscheinlich aufgrund eines Installationsproblems.

    Verwenden Sie zum Beheben dieses Problems das Visual Studio-Installationsprogramm, um Ihre Visual Studio-Installation neu zu installieren oder zu reparieren.