Debugowanie przy użyciu debugera just in time w Visual Studio

Debugowanie just in time może automatycznie uruchamiać Visual Studio, gdy aplikacja uruchomiona poza Visual Studio lub ulega awarii. W przypadku debugowania just in time możesz testować aplikacje poza Visual Studio i otwierać Visual Studio, aby rozpocząć debugowanie w przypadku wystąpienia problemu.

Debugowanie just in time działa w Windows klasycznych. Nie działa w przypadku aplikacji universal Windows Apps ani kodu zarządzanego, który jest hostowany w aplikacji natywnej, takiej jak wizualizatory.

Porada

Jeśli chcesz tylko zatrzymać wyświetlanie okna dialogowego debugera just in time, ale nie masz zainstalowanych Visual Studio, zobacz Wyłączanie debugera just in time. Jeśli po zainstalowaniu Visual Studio, może być konieczne wyłączenie debugowania just in timez Windows rejestru .

Włączanie lub wyłączanie debugowania just in time w programie Visual Studio

Uwaga

Aby włączyć lub wyłączyć debugowanie just in time, musisz uruchamiać Visual Studio jako administrator. Włączenie lub wyłączenie debugowania just in time ustawia klucz rejestru, a do zmiany tego klucza mogą być wymagane uprawnienia administratora. Aby otworzyć Visual Studio jako administrator, kliknij prawym przyciskiem myszy aplikację Visual Studio i wybierz polecenie Uruchom jako administrator.

Debugowanie just in time można skonfigurować w oknie dialogowym Opcje Visual Studio (lub > Opcje > debugowania).

Aby włączyć lub wyłączyć debugowanie just in time:

  1. W menu Narzędzia lub Debugowanie wybierz pozycję Opcje > > Debugowanie just in time.

    Włączanie lub wyłączanie debugowania JIT

  2. W polu Włącz debugowanie just in time dla tych typów kodu wybierz typy kodu, które mają być debugowane przez debugowanie just in time: zarządzany, natywny , i/lub skrypt.

  3. Wybierz przycisk OK.

Jeśli włączysz debuger just in time, ale nie zostanie otwarty, gdy aplikacja ulega awarii lub występują błędy, zobacz Troubleshoot Just-In-Time debugging(Rozwiązywanie problemów z debugowaniem just in time).

Wyłączanie debugowania just in time z Windows rejestru

Debugowanie just in time może być nadal włączone, nawet Visual Studio nie jest już zainstalowane na komputerze. Jeśli Visual Studio nie jest już zainstalowany, możesz wyłączyć debugowanie just in time, edytując Windows rejestru.

Aby wyłączyć debugowanie just in time, edytując rejestr:

  1. Z Windows Start uruchom Edytor rejestru (regedit.exe).

  2. W oknie Edytor rejestru znajdź i usuń następujące wpisy rejestru:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ . NETFramework\DbgManagedDebugger

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

    Klucz rejestru JIT

  3. Jeśli na komputerze jest uruchomiony 64-bitowy system operacyjny, usuń również następujące wpisy rejestru:

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

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

    Upewnij się, że nie usuwasz ani nie zmieniasz żadnych innych kluczy rejestru.

  4. Zamknij okno Edytor rejestru.

Włączanie debugowania just in time Windows formularza

Domyślnie aplikacje Windows mają program obsługi wyjątków najwyższego poziomu, który umożliwia aplikacji działanie, jeśli można ją odzyskać. Jeśli aplikacja Windows Forms zgłasza nieobsługiwany wyjątek, zostanie wyświetlone następujące okno dialogowe:

Windows Wyjątek nieobsługiwanego formularza

Aby włączyć debugowanie just in time zamiast standardowej obsługi Windows formularza, dodaj następujące ustawienia:

  • W system.windows.forms sekcji pliku machine.config lub <app name> .exe.config ustaw wartość jitDebugging na true :

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  • W aplikacji C++ Windows formularzu ustaw również wartość w pliku DebuggableAttribute true .config lub w kodzie. W przypadku kompilacji z /Zi i bez /Ogkompilator ustawia ten atrybut za Ciebie. Jeśli jednak chcesz debugować niezoptymacyjną kompilację wydania, musisz to zrobić, dodając następujący wiersz w pliku DebuggableAttribute AssemblyInfo.cpp aplikacji:

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

    Aby uzyskać więcej informacji, zobacz DebuggableAttribute.

Korzystanie z debugowania just in time

W tym przykładzie ominiesz debugowanie Just-In-Time, gdy aplikacja zrzuci błąd.

  • Aby wykonać te Visual Studio, musisz mieć zainstalowane oprogramowanie. Jeśli nie masz jeszcze aplikacji Visual Studio, możesz pobrać bezpłatny program Visual Studio Community Edition.

  • Upewnij się, że debugowanie just in time jest włączone w opcji Narzędzia > > Debugowanie > just in time.

W tym przykładzie w języku C# zostanie w języku Visual Studio zgłaszany wyjątek NullReferenceException.

  1. W Visual Studio aplikacji konsolowej języka C#(File > New > Project > Visual C# Console Application ) o nazwie > ThrowsNullException. Aby uzyskać więcej informacji na temat tworzenia projektów w Visual Studio, zobacz Przewodnik: tworzenie prostej aplikacji.

  2. Po otwarciu projektu w Visual Studio otwórz plik Program.cs. Zastąp metodę Main() następującym kodem, który drukuje wiersz w konsoli, a następnie zgłasza wyjątek NullReferenceException:

    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. Aby skompilować rozwiązanie, wybierz konfigurację Debuguj (ustawienie domyślne) lub Wydanie, a następnie wybierz pozycję Skompilowaj > ponownie rozwiązanie.

    Uwaga

    • Wybierz pozycję Konfiguracja debugowania, aby uzyskać pełne środowisko debugowania.
    • W przypadku wybrania opcji Konfiguracja wydania należy wyłączyć Tylko mój kod, aby ta procedura działała. W obszarze Narzędzia Opcje > > debugowania usuń zaznaczenie opcji Włącz Tylko mój kod.

    Aby uzyskać więcej informacji na temat konfiguracji kompilacji, zobacz Understanding build configurations (Opis konfiguracji kompilacji).

  4. Otwórz kompilację aplikacji ThrowsNullException.exe folderze projektu języka C# (...\ThrowsNullException\ThrowsNullException\bin\Debug lub ...\ThrowsNullException\ThrowsNullException\bin\Release).

    Powinno zostać wyświetlony następujące okno polecenia:

    Zrzut ekranu przedstawiający konsolę ThrowsNullException.exe, który zgłasza nieobsługiwany wyjątek odwołania o wartości null (System.NullReferenceException).

  5. Zostanie otwarte okno dialogowe Wybieranie debugera just in time.

    Zrzut ekranu przedstawiający okno dialogowe Wybieranie debugera just in time, które pojawia się po wyjątku w ThrowsNullException.exe konsoli.

    W obszarze Dostępne debugery wybierz pozycję Nowe <your preferred Visual Studio version/edition> wystąpienie, jeśli nie zostało jeszcze wybrane.

  6. Wybierz przycisk OK.

    Projekt ThrowsNullException otwiera się w nowym wystąpieniu Visual Studio, a wykonywanie zostało zatrzymane w wierszu, który wywłaszczył wyjątek:

    Zrzut ekranu przedstawiający projekt ThrowsNullException w Visual Studio, z wyróżnieniem wiersza kodu źródłowego, który zwrócił wyjątek.

W tym momencie możesz rozpocząć debugowanie. Jeśli debugujesz rzeczywistą aplikację, musisz dowiedzieć się, dlaczego kod zgłasza wyjątek.

Przestroga

Jeśli aplikacja zawiera niezaufany kod, zostanie wyświetlone okno dialogowe ostrzeżenia o zabezpieczeniach umożliwiające podjęcie decyzji, czy kontynuować debugowanie. Przed kontynuowaniem debugowania zdecyduj, czy ufasz kodowi. Czy kod został przez Ciebie napisać samodzielnie? Jeśli aplikacja jest uruchomiona na maszynie zdalnej, czy rozpoznajesz nazwę procesu? Jeśli aplikacja działa lokalnie, rozważ możliwość uruchomienia złośliwego kodu na komputerze. Jeśli zdecydujesz, że kod jest godny zaufania, wybierz przycisk OK. W przeciwnym razie wybierz pozycję Anuluj.

Rozwiązywanie problemów z debugowaniem just in time

Jeśli debugowanie just in time nie uruchamia się, gdy aplikacja ulega awarii, mimo że jest włączona w Visual Studio:

  • Raportowanie błędów systemu Windows może przejmować obsługę błędów na komputerze.

    Aby rozwiązać ten problem, użyj Edytora rejestru, aby dodać wartość DWORD disabled(Wyłączone) z danymi o wartości 1 do następujących kluczy rejestru:

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

    • (W przypadku maszyn 64-bitowych): HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting

    Aby uzyskać więcej informacji, zobacz . Ustawienia serwera WER.

  • Znany problem Windows może powodować niepowodzenie debugera just in time.

    Aby rozwiązać ten problem, należy dodać wartość DWORD auto z danymi o wartości 1 do następujących kluczy rejestru:

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

    • (W przypadku maszyn 64-bitowych): HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

Podczas debugowania just in time mogą pojawić się następujące komunikaty o błędach:

  • Nie można dołączyć do procesu awarii. Określony program nie jest programem Windows programem MS-DOS.

    Debuger próbował dołączyć do procesu uruchomionego w ramach innego użytkownika.

    Aby rozwiązać ten problem, w Visual Studio otwórz polecenie Debuguj dołączanie do procesu (lub naciśnij klawisze > Ctrl + Alt P + ) i znajdź proces, który chcesz debugować, na liście Dostępne procesy. Jeśli nie znasz nazwy procesu, znajdź identyfikator procesu w oknie dialogowym Visual Studio debuger just in time. Wybierz proces z listy Dostępne procesy, a następnie wybierz pozycję Dołącz. Wybierz pozycję Nie, aby odrzucić okno dialogowe debugera just in time.

  • Nie można rozpocząć debugera, ponieważ żaden użytkownik nie jest zalogowany.

    W konsoli nie jest zalogowany żaden użytkownik, więc nie ma sesji użytkownika do wyświetlania okna dialogowego debugowania just in time.

    Aby rozwiązać ten problem, zaloguj się na maszynie.

  • Klasa nie jest zarejestrowana.

    Debuger próbował utworzyć klasę COM, która nie jest zarejestrowana, prawdopodobnie z powodu problemu z instalacją.

    Aby rozwiązać ten problem, użyj Instalator programu Visual Studio instalacji ponownie lub napraw Visual Studio instalacji.

Zobacz też