Udostępnij za pośrednictwem


Debugowanie przy użyciu debugera Just-In-Time w programie Visual Studio

Just-In-Time debugowanie może automatycznie uruchamiać Visual Studio, gdy aplikacja działająca poza Visual Studio generuje błędy lub ulega awarii. W przypadku debugowania just-In-Time można testować aplikacje poza programem Visual Studio i otwierać program Visual Studio, aby rozpocząć debugowanie po wystąpieniu problemu.

Debugowanie Just-In-Time działa w przypadku aplikacji desktopowych w systemie Windows. Nie działa w przypadku aplikacji uniwersalnych systemu Windows ani kodu zarządzanego hostowanego w aplikacji natywnej, takiego jak Wizualizatory.

Napiwek

Jeśli chcesz zatrzymać wyświetlanie okna dialogowego Just-In-Time Debugger, ale nie masz zainstalowanego programu Visual Studio, zobacz Disable the Just-In-Time Debugger. Jeśli po zainstalowaniu programu Visual Studio może być konieczne wyłączenie debugowania just-In-Time z rejestru systemu Windows.

Włączanie lub wyłączanie debugowania just-In-Time w programie Visual Studio

Debugowanie just-In-Time można skonfigurować w oknie dialogowym Opcje(lub Opcje debugowania>) programu Microsoft Visual Studio Narzędzia>.

Notatka

Aby włączyć lub wyłączyć debugowanie just-In-Time, musisz uruchomić program Visual Studio jako administrator. Włączenie lub wyłączenie debugowania Just-In-Time ustawia klucz rejestru, a uprawnienia administratora mogą być wymagane do zmiany tego klucza. Aby otworzyć program Visual Studio jako administrator, kliknij prawym przyciskiem myszy aplikację Visual Studio i wybierz pozycję Uruchom jako administrator.

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

    Notatka

    Jeśli opcja menu Just-In-Time nie jest wyświetlana, upewnij się, że debuger Just-In-Time jest zainstalowany przy użyciu Instalatora programu Visual Studio.

  2. W polu Włącz debugowanie just-In-Time dla tych typów kodu wybierz typy kodu, które chcesz, aby just-In-Time debugowało: Managed, Nativei/lub Script.

  3. Wybierz pozycję OK.

Jeśli włączysz debuger Just-In-Time, ale nie zostanie otwarty, gdy aplikacja ulegnie awarii lub błędom, zobacz Rozwiązywanie problemów z debugowaniem just-In-Time.

Wyłącz debugowanie just-In-Time z rejestru systemu Windows

Just-In-Time debugowanie może być nadal włączone, nawet jeśli program Visual Studio nie jest już zainstalowany na komputerze. Jeśli program Visual Studio nie jest już zainstalowany, możesz wyłączyć debugowanie just-In-Time, edytując rejestr systemu Windows.

Aby wyłączyć debugowanie just-In-Time, edytując rejestr:

  1. W menu Start systemu Windows uruchom edytor rejestru (regedit.exe).

  2. W oknie edytora rejestru znajdź i usuń następujące wpisy rejestru, jeśli istnieją:

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

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

    klucza rejestru JIT

  3. Usuń również następujące wpisy rejestru, jeśli istnieją:

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

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

    Pamiętaj, aby nie usuwać ani zmieniać żadnych innych kluczy rejestru.

  4. Zamknij okno edytora rejestru.

Włącz debugowanie just-In-Time formularza systemu Windows

Domyślnie aplikacje formularzy systemu Windows mają procedurę obsługi wyjątków najwyższego poziomu, która pozwala aplikacji działać dalej, jeśli może się z tego wybronić. Jeśli aplikacja Windows Forms zgłasza nieobsługiwany wyjątek, zostanie wyświetlone następujące okno dialogowe:

nieobsługiwany wyjątek formularza systemu Windows formularza systemu Windows

Aby włączyć debugowanie just-In-Time zamiast standardowej obsługi błędów formularza systemu Windows, dodaj następujące ustawienia:

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

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  • W aplikacji formularzy systemu Windows w języku C++ ustaw również DebuggableAttribute na true w pliku .config lub w kodzie. Jeśli kompilujesz z /Zi i bez /Og, kompilator ustawi ten atrybut. Jeśli jednak chcesz debugować niezoptymalizowaną kompilację wydania, musisz ustawić DebuggableAttribute, dodając następujący wiersz w pliku AssemblyInfo.cpp aplikacji:

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

    Aby uzyskać więcej informacji, zobacz DebuggableAttribute.

Użyj debugowania Just-In-Time

W tym przykładzie przedstawiono debugowanie typu Just-In-Time, gdy aplikacja zgłasza błąd.

  • Aby wykonać te kroki, musisz mieć zainstalowany program Visual Studio. Jeśli nie masz programu Visual Studio, możesz pobrać bezpłatną Visual Studio Community Edition.

  • Upewnij się, że debugowanie just-In-Time jest włączone w narzędziach Tools>Options>Debugowanie>just in time.

W tym przykładzie tworzysz konsolową aplikację C# za pomocą Visual Studio, która zgłasza NullReferenceException.

  1. W programie Visual Studio utwórz aplikację konsolową języka C# (File>New>Project>Visual C#>Console Application) o nazwie ThrowsNullException. Aby uzyskać więcej informacji na temat tworzenia projektów w programie Visual Studio, zobacz przewodnik : Tworzenie prostej aplikacji.

  2. Po otwarciu projektu w programie Visual Studio otwórz plik Program.cs. Zastąp metodę Main(następującym kodem, który wyświetla 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ę Debug (domyślną) lub Release, a następnie wybierz opcję Build>Rebuild Solution.

    Notatka

    • Wybierz konfigurację Debug, aby uzyskać pełne możliwości debugowania.
    • Jeśli wybierzesz konfigurację Release, musisz wyłączyć opcję Just My Code, aby ta procedura działała. W obszarze Narzędzia>Opcje>Debugowanie, usuń zaznaczenie opcji "Zezwalaj tylko na mój kod" .

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

  4. Otwórz skompilowaną aplikację ThrowsNullException.exe w folderze projektu C# (...\ThrowsNullException\ThrowsNullException\bin\Debug lub ...\ThrowsNullException\ThrowsNullException\bin\Release).

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

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

  5. Otwiera się okno dialogowe Choose Just-In-Time Debugger.

    Zrzut ekranu przedstawiający okno dialogowe Wybór debugera just-in-timeIn-Time, które pojawia się po wystąpieniu wyjątku w oknie konsoli ThrowsNullException.exe.

    W obszarze Dostępne debugerywybierz pozycję Nowe wystąpienie programu <preferowaną wersję/wydanie programu Visual Studio>, jeśli nie została jeszcze wybrana.

  6. Wybierz pozycję OK.

    Projekt ThrowsNullException otwiera się w nowym wystąpieniu programu Visual Studio, a wykonanie zatrzymuje się na linii, w której wystąpił wyjątek.

    Zrzut ekranu przedstawiający projekt ThrowsNullException w programie Visual Studio z wyróżnionym wierszem kodu źródłowego, który zgłosił wyjątek.

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

Ostrożność

Jeśli aplikacja zawiera niezaufany kod, zostanie wyświetlone okno dialogowe ostrzeżenia o zabezpieczeniach, które umożliwia podjęcie decyzji, czy kontynuować debugowanie. Przed kontynuowaniem debugowania zdecyduj, czy ufasz kodowi. Czy samodzielnie napisałeś kod? Jeśli aplikacja jest uruchomiona na maszynie zdalnej, czy rozpoznasz 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 pozycję OK. W przeciwnym razie wybierz pozycję Anuluj.

Rozwiązywanie problemów z debugowaniem Just-In-Time

Jeśli debugowanie just-In-Time nie zostanie uruchomione, gdy aplikacja ulegnie awarii, mimo że jest włączona w programie Visual Studio:

  • Znany problem z systemem Windows może powodować niepowodzenie debugera Just-In-Time.

    Poprawka polega na dodaniu wartości DWORD Auto, z danymi 1, do następujących kluczy rejestru:

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

    • (W przypadku aplikacji 32-bitowych na maszynach 64-bitowych) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

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

    Aby rozwiązać ten problem, użyj Edytora rejestru, aby dodać wartość DWORD o nazwie Disabledz danymi wartości 1do następujących kluczy rejestru:

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

    • (W przypadku aplikacji 32-bitowych na maszynach 64-bitowych) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting

    Aby uzyskać więcej informacji, zobacz . Ustawienia usługi WER.

Podczas debugowania just-In-Time mogą zostać wyświetlone następujące komunikaty o błędach:

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

    Debuger próbował dołączyć do procesu uruchomionego pod innym użytkownikiem.

    Aby obejść ten problem, w programie Visual Studio otwórz Debug>Dołącz do procesu (lub naciśnij Ctrl + Alt + P), a następnie znajdź proces, który chcesz debugować, na liście Dostępnych procesów. Jeśli nie znasz nazwy procesu, znajdź identyfikator procesu w oknie dialogowym Visual Studio Just-In-Time Debugger. Wybierz proces na liście dostępnych procesów, a następnie wybierz pozycję Załącz. Aby zamknąć okno dialogowe debugera Just-In-Time, wybierz Nie.

  • nie można uruchomić debugera, ponieważ żaden użytkownik nie jest zalogowany.

    Nie ma zalogowanego użytkownika na konsoli, więc nie ma sesji użytkownika do wyświetlenia 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 Instalatora programu Visual Studio, aby ponownie zainstalować lub naprawić instalację programu Visual Studio.