Udostępnij za pośrednictwem


Samouczek: debugowanie aplikacji konsolowej .NET

W tym samouczku przedstawiono narzędzia debugowania dostępne w Visual Studio.

Ważna

Wszystkie skróty klawiaturowe są oparte na wartościach domyślnych z Visual Studio. Skróty klawiaturowe mogą się różnić, więcej informacji znajdziesz w Skróty klawiaturowe w Visual Studio.

W tym samouczku przedstawiono narzędzia debugowania dostępne w Visual Studio Code do pracy z aplikacjami .NET.

W tym samouczku przedstawiono narzędzia debugowania dostępne w usłudze GitHub Codespaces do pracy z aplikacjami .NET.

Wymagania wstępne

Ten samouczek współpracuje z aplikacją konsolową utworzoną w Utwórz aplikację konsolową .NET.

Użyj konfiguracji kompilacji Debug

Debug i Release są wbudowanymi konfiguracjami kompilacji w Visual Studio. Używasz konfiguracji kompilacji Debug do debugowania, a konfiguracji Release do końcowej dystrybucji wydania.

W konfiguracji debugowania program jest kompilowany z pełnymi symbolicznymi informacjami debugowania i bez optymalizacji. Optymalizacja komplikuje debugowanie, ponieważ relacja między kodem źródłowym i wygenerowanymi instrukcjami jest bardziej złożona. Konfiguracja wydania programu nie zawiera żadnych symbolicznych informacji debugowania i jest w pełni zoptymalizowana.

Domyślnie Visual Studio używa konfiguracji kompilacji debugowania, więc nie trzeba jej zmieniać przed debugowaniem.

  1. Uruchom Visual Studio.

  2. Otwórz projekt utworzony w Utwórz aplikację konsolową .NET.

    Bieżąca konfiguracja kompilacji jest wyświetlana na pasku narzędzi. Poniższy obraz paska narzędzi pokazuje, że Visual Studio jest skonfigurowany do kompilowania wersji debugowania aplikacji:

    Visual Studio pasek narzędzi z wyróżnionym debugowaniem

Ustawianie punktu przerwania

punkt przerwania tymczasowo przerywa wykonywanie aplikacji przed uruchomieniem wiersza z punktem przerwania.

  1. Ustaw punkt przerwania w wierszu, który wyświetla nazwę, datę i godzinę, klikając lewy margines okna kodu w tym wierszu. Lewy margines znajduje się po lewej stronie numerów wierszy. Inne sposoby ustawiania punktu przerwania to umieszczenie kursora w wierszu kodu, a następnie naciśnięcie F9 lub wybranie DebugPrzełącz punkt przerwania na pasku menu.

    Jak pokazano na poniższym obrazie, Visual Studio wskazuje linię, na której ustawiono punkt przerwania, wyróżniając ją i wyświetlając czerwoną kropkę na lewym marginesie.

    Okno programu Visual Studio z aktywnym punktem przerwania

  2. Naciśnij F5, aby uruchomić program w trybie debugowania. Innym sposobem rozpoczęcia debugowania jest wybranie DebugRozpocznij debugowanie z menu.

  3. Wprowadź ciąg w oknie konsoli, gdy program wyświetli monit o nazwę, a następnie naciśnij Enter.

  4. Wykonanie programu zatrzymuje się po osiągnięciu punktu przerwania i przed wykonaniem metody . W oknie Locals są wyświetlane wartości zmiennych zdefiniowanych w aktualnie wykonywanej metodzie.

    Ochwyt ekranu przedstawiający punkt przerwania w Visual Studio

  1. Uruchom Visual Studio Code.

  2. Otwórz folder projektu utworzonego w Utwórz aplikację konsolową .NET.

  3. Otwórz plik Program.cs.

  4. Ustaw punkt przerwania w wierszu, który wyświetla nazwę, datę i godzinę, klikając w lewym marginesie okna z kodem. Lewy margines znajduje się po lewej stronie numerów wierszy. Inne sposoby ustawiania punktu przerwania polegają na naciśnięciu F9 lub wybraniu UruchomPrzełącz punkt przerwania z menu podczas wybierania wiersza kodu.

    Visual Studio Code wskazuje wiersz, na którym ustawiono punkt przerwania, wyświetlając czerwoną kropkę na lewym marginesie.

    zestaw punktów przerwania

  1. Otwórz GitHub Codespace utworzony w Utwórz aplikację konsolową .NET.

  2. Otwórz plik HelloWorld.cs .

  3. Ustaw punkt przerwania w wierszu, który wyświetla nazwę, datę i godzinę, klikając w lewym marginesie okna z kodem. Lewy margines znajduje się po lewej stronie numerów wierszy. Punkt przerwania można również ustawić, naciskając F9 , gdy zaznaczono wiersz kodu.

    zestaw punktów przerwania

Rozpocznij debugowanie

Wykonanie programu zostaje zatrzymane, gdy osiągnie punkt przerwania, zgodnie z opisem w poprzedniej sekcji. W oknie Locals są wyświetlane wartości zmiennych zdefiniowanych w aktualnie wykonywanej metodzie.

Debug i Release są wbudowanymi konfiguracjami kompilacji .NET. Używasz konfiguracji kompilacji Debug do debugowania, a konfiguracji Release do końcowej dystrybucji wydania.

Domyślnie ustawienia uruchamiania w Visual Studio Code używają konfiguracji kompilacji Debug, więc nie trzeba jej zmieniać przed debugowaniem.

  1. Otwórz widok Debuguj, wybierając ikonę Debugowanie w menu po lewej stronie.

    Otwórz kartę Debugowanie w Visual Studio Code

  2. Wybierz pozycję Uruchom i debuguj. Jeśli zostaniesz poproszony, wybierz pozycję C#, a następnie wybierz pozycję C#: Uruchom projekt startowy. Inne sposoby uruchamiania programu w trybie debugowania to naciśnięcie F5 lub wybranie UruchomRozpocznij debugowanie z menu.

    Rozpocznij debugowanie

  3. Jeśli zostanie wyświetlony monit o wybranie opcji Konfiguracja uruchamiania, wybierz pozycję C#: Debuguj aktywny plik.

  4. Wybierz kartę konsoli debugowania , aby wyświetlić monit "Jaka jest Twoja nazwa?" wyświetlany przed oczekiwaniem na odpowiedź.

    Wybierz kartę Konsola debugowania

  5. Wpisz ciąg w oknie konsoli debugowania w odpowiedzi na monit o nazwę, a następnie naciśnij Enter.

    Wykonanie programu zatrzymuje się po osiągnięciu punktu przerwania i przed uruchomieniem metody . W sekcji Locals okna Variables są wyświetlane wartości zmiennych zdefiniowanych w aktualnie uruchomionej metodzie.

    Punkt przerwania został osiągnięty, pokazuje zmienne lokalne

Domyślnie GitHub Codespaces używa konfiguracji kompilacji trybu debug, co oznacza, że nie musisz jej zmieniać przed debugowaniem.

  1. Otwórz widok Debuguj, wybierając ikonę Debugowanie w menu po lewej stronie.

    Otwórz kartę Debugowanie w Visual Studio Code

  2. Wybierz pozycję Uruchom i debuguj. Jeśli zostanie wyświetlony monit, wybierz pozycję C# jako debuger, a następnie wybierz pozycję C#: Debuguj aktywny plik jako konfigurację uruchamiania.

  3. Wybierz kartę konsoli debugowania , aby wyświetlić monit "Jaka jest Twoja nazwa?" wyświetlany przed oczekiwaniem na odpowiedź.

  4. Wpisz ciąg w oknie konsoli debugowania w odpowiedzi na monit o nazwę, a następnie naciśnij Enter.

    Wykonanie programu zatrzymuje się po osiągnięciu punktu przerwania i przed uruchomieniem metody . W sekcji Locals okna Variables są wyświetlane wartości zmiennych zdefiniowanych w aktualnie uruchomionej metodzie.

    Punkt przerwania został osiągnięty, pokazuje zmienne lokalne

Korzystanie z okna natychmiastowego

Okno Bezpośrednie pozwala na interakcję z aplikacją, którą debugujesz. Możesz interaktywnie zmienić wartość zmiennych, aby zobaczyć, jak ma to wpływ na program.

  1. Jeśli okno Immediate nie jest widoczne, wyświetl je, wybierając Debug>Windows>Immediate.

  2. Wprowadź w oknie Natychmiastowe i naciśnij Enter.

  3. Wprowadź w oknie Natychmiastowe i naciśnij Enter.

    W oknie natychmiastowym wyświetla się wartość zmiennej tekstowej oraz właściwości wartości . Ponadto wartości zmiennych są aktualizowane w oknie Locals.

    Okna lokalne i natychmiastowe w Visual Studio

  4. Naciśnij F5, aby kontynuować wykonywanie programu. Można też kontynuować, wybierając Debug Kontynuuj z menu.

    Wartości wyświetlane w oknie konsoli odpowiadają zmianom, które wprowadziłeś w oknie Natychmiastowym.

  5. Naciśnij dowolny, aby zamknąć aplikację i zatrzymać debugowanie.

Korzystanie z konsoli debugowania

Okno konsoli debugowania pozwala na interakcję z aplikacją, którą debugujesz. Możesz zmienić wartość zmiennych, aby zobaczyć, jak ma to wpływ na program.

  1. Wybierz kartę konsoli debugowania .

  2. Wprowadź w wierszu polecenia w dolnej części okna konsoli debugowania i naciśnij Enter.

    Zmień wartości zmiennych

  3. Wprowadź w dolnej części okna Konsoli debugowania i naciśnij Enter.

    W oknie Zmienne wyświetlane są nowe wartości zmiennych i .

  4. Kontynuuj wykonywanie programu, wybierając przycisk Kontynuuj na pasku narzędzi. Innym sposobem kontynuowania jest naciśnięcie F5.

    Kontynuuj debugowanie

    Wartości wyświetlane w oknie konsoli odpowiadają zmianom wprowadzonych w konsoli debugowania .

    Terminal przedstawiający wprowadzone wartości

  5. Naciśnij wprowadź, aby zamknąć aplikację i zatrzymać debugowanie.

Ustawianie warunkowego punktu przerwania

Program wyświetla ciąg wprowadzony przez użytkownika. Co się stanie, jeśli użytkownik nic nie wprowadzi? Można to przetestować za pomocą przydatnej funkcji debugowania zwanej warunkowym punktem przerwania.

  1. Kliknij prawym przyciskiem myszy czerwoną kropkę reprezentującą punkt przerwania. W menu kontekstowym wybierz pozycję Warunki, aby otworzyć okno dialogowe Ustawienia punktu przerwania. Wybierz pole Warunki, jeśli jeszcze nie jest zaznaczone.

    Edytor wyświetlający panel ustawień punktu przerwania — w języku C#

  2. Dla wyrażenia warunkowego wprowadź następujący kod w polu tekstowym.

    string.IsNullOrEmpty(name)
    
    String.IsNullOrEmpty(name)
    

    Za każdym razem, gdy punkt przerwania zostanie trafiony, debuger wywołuje metodę i przerywa działanie w tym wierszu tylko wtedy, gdy wywołanie metody zwraca .

    Zamiast wyrażenia warunkowego można określić licznik trafień , który przerywa wykonanie programu przed wykonaniem instrukcji określoną liczbę razy. Inną opcją jest określenie warunku filtru , który przerywa wykonywanie programu na podstawie takich atrybutów jak identyfikator wątku, nazwa procesu lub nazwa wątku.

  3. Wybierz pozycję Zamknij , aby zamknąć okno dialogowe.

  4. Uruchom program z debugowaniem, naciskając F5.

  5. W oknie konsoli naciśnij Enter po wyświetleniu monitu o wprowadzenie nazwy.

  6. Ponieważ określony warunek ( jest lub ) został spełniony, wykonanie programu zatrzymuje się po osiągnięciu punktu przerwania i przed wykonaniem metody .

  7. Wybierz okno Lokalne, które pokazuje wartości zmiennych lokalnych dla aktualnie wykonywanej metody. W tym przypadku jest aktualnie wykonywaną metodą. Zwróć uwagę, że wartość zmiennej jest , lub .

  8. Upewnij się, że wartość jest pustym ciągiem, wprowadzając następującą instrukcję w oknie Natychmiastowym i naciskając Enter. Wynik to .

    ? name == String.Empty
    
    ? String.IsNullOrEmpty(name)
    

    Znak zapytania kieruje bezpośrednie okno, aby ocenić wyrażenie.

    Okno Natychmiastowe zwraca wartość true po wykonaniu instrukcji — C#

  9. Naciśnij F5, aby kontynuować wykonywanie programu.

  10. Naciśnij dowolny, aby zamknąć okno konsoli i zatrzymać debugowanie.

  11. Wyczyść punkt przerwania, klikając kropkę na lewym marginesie okna kodu. Inne sposoby czyszczenia punktu przerwania polegają na naciśnięciu F9 lub wybraniu Debug Przełącz punkt przerwania przy zaznaczonym wierszu kodu.

  1. Kliknij prawym przyciskiem myszy na czerwonej kropce (Ctrl-kliknij w systemie macOS), która reprezentuje punkt przerwania. W menu kontekstowym wybierz pozycję Edytuj punkt przerwania, aby otworzyć okno dialogowe umożliwiające wprowadzenie wyrażenia warunkowego.

    menu kontekstowe punktu przerwania

  2. Wybierz na liście rozwijanej, wprowadź następujące wyrażenie warunkowe i naciśnij Wprowadź.

    String.IsNullOrEmpty(name)
    

    wprowadź wyrażenie warunkowe

    Za każdym razem, gdy punkt przerwania zostanie trafiony, debuger wywołuje metodę i przerywa działanie w tym wierszu tylko wtedy, gdy wywołanie metody zwraca .

    Zamiast wyrażenia warunkowego można określić liczbę trafień, która przerywa wykonywanie programu przed uruchomieniem instrukcji określoną liczbę razy. Inną opcją jest określenie warunku filtru , który przerywa wykonywanie programu na podstawie takich atrybutów jak identyfikator wątku, nazwa procesu lub nazwa wątku.

  3. Uruchom program z debugowaniem, naciskając F5.

  4. Na karcie Debug Console naciśnij Enter, gdy zostaniesz poproszony o podanie swojego imienia.

    Ponieważ określony warunek ( jest lub ) został spełniony, wykonanie programu zatrzymuje się po osiągnięciu punktu przerwania i przed uruchomieniem metody .

    W oknie zmiennych widać, że wartość zmiennej jest lub .

  5. Upewnij się, że wartość jest pustym ciągiem, wpisując następujące polecenie przy monicie konsoli debugowania i naciskając Enter. Wynik to .

    name == String.Empty
    
  6. Wybierz przycisk Kontynuuj na pasku narzędzi, aby kontynuować wykonywanie programu.

  7. Naciśnij wprowadź, aby zakończyć działanie programu i zatrzymać debugowanie.

  8. Wyczyść punkt przerwania, klikając kropkę na lewym marginesie okna kodu. Inne sposoby czyszczenia punktu przerwania polegają na naciśnięciu F9 lub wybraniu Uruchom Przełącz punkt przerwania z menu podczas wybierania wiersza kodu.

  9. Jeśli zostanie wyświetlone ostrzeżenie, że warunek punktu przerwania zostanie utracony, wybierz pozycję Usuń punkt przerwania.

Przechodzenie przez program

Visual Studio umożliwia również przechodzenie przez program krok po linii i monitorowanie jego wykonywania. Zazwyczaj należy ustawić punkt przerwania i śledzić przepływ programu przez niewielką część kodu programu. Ponieważ ten program jest mały, można przejść przez cały program.

  1. Ustaw punkt przerwania w wierszu kodu, który wyświetla monit "Jaka jest Twoja nazwa?".

  2. Wybierz pozycję DebugWejdź do. Innym sposobem debugowania jednej instrukcji naraz jest naciśnięcie F11.

    Visual Studio wyróżnia i wyświetla strzałkę obok następnej linii wykonywania.

    Visual Studio krok do metody — C#

    W tym momencie okno Locals pokazuje, że tablica jest pusta, a i mają wartości domyślne. Ponadto Visual Studio otworzył puste okno konsoli.

  3. Naciśnij F11. Visual Studio wyróżnia instrukcję zawierającą przypisanie zmiennej name. W oknie Locals widać, że jest , a w oknie konsoli zostanie wyświetlony ciąg "Jaka jest Twoja nazwa?".

  4. Odpowiedz na monit, wprowadzając ciąg w oknie konsoli i naciskając Wprowadź. Konsola nie odpowiada, a wprowadzony ciąg nie jest wyświetlany w oknie konsoli, ale metoda mimo to przechwytuje dane wejściowe.

  5. Naciśnij F11. Visual Studio wyróżnia instrukcję zawierającą przypisanie zmiennej currentDate. Okno Locals pokazuje wartość zwróconą przez wywołanie metody . W oknie konsoli zostanie również wyświetlony ciąg wprowadzony w wierszu polecenia.

  6. Naciśnij F11. Okno Locals pokazuje wartość zmiennej po przypisaniu z właściwości . Okno konsoli pozostaje niezmienione.

  7. Naciśnij F11. Visual Studio wywołuje metodę Console.WriteLine(String, Object, Object). W oknie konsoli zostanie wyświetlony sformatowany ciąg.

  8. Wybierz pozycję Debugowanie. Innym sposobem zatrzymania wykonywania krok po kroku jest naciśnięcie ShiftF11.

    W oknie konsoli zostanie wyświetlony komunikat i zaczeka na naciśnięcie.

  9. Naciśnij dowolny, aby zamknąć okno konsoli i zatrzymać debugowanie.

Visual Studio Code umożliwia również przechodzenie przez program krok po kroku i śledzenie jego wykonywania. Zazwyczaj należy ustawić punkt przerwania i śledzić przepływ programu przez niewielką część kodu programu. Ponieważ ten program jest mały, można przejść przez cały program.

  1. Ustaw punkt przerwania w wierszu kodu, który wyświetla monit "Jaka jest Twoja nazwa?".

  2. Naciśnij F5 , aby rozpocząć debugowanie.

    Visual Studio Code wyróżnia linię punktu przerwania.

    W tym momencie okno Zmiennych pokazuje, że tablica jest pusta, a i mają wartości domyślne.

  3. Wybierz pozycję Krok do z paska narzędzi Debugowanie lub naciśnij F11.

    przycisk Step-Into

    Visual Studio Code wyróżnia następny wiersz.

  4. Visual Studio Code uruchamia Console.WriteLine dla monitu nazwy i wyróżnia następną linię wykonywania. Następny wiersz to dla . Okno zmiennych jest niezmienione, a karta Terminal wyświetla monit "Jak się nazywasz?".

  5. Wybierz Wejdź w lub naciśnij F11.

    Visual Studio Code wyróżnia przypisanie zmiennej name. Okno Zmienne pokazuje, że jest nadal .

  6. Odpowiedz na monit, wprowadzając ciąg na karcie Terminal i naciskając Enter.

    Karta konsoli debugowania może nie wyświetlać wprowadzonego ciągu, ale metoda przechwytuje dane wejściowe.

  7. Wybierz Wejdź w lub naciśnij F11.

    Visual Studio Code wyróżnia przypisanie zmiennej currentDate. W oknie Zmienna jest wyświetlana wartość zwrócona przez wywołanie metody . Karta terminalu wyświetla ciąg wprowadzony w wierszu polecenia.

  8. Wybierz Wejdź w lub naciśnij F11.

    W oknie Zmienne jest wyświetlana wartość zmiennej po przypisaniu wartości z właściwości .

  9. Wybierz Wejdź w lub naciśnij F11.

    Visual Studio Code wywołuje metodę Console.WriteLine(String, Object, Object). W oknie konsoli zostanie wyświetlony sformatowany ciąg.

  10. Wybierz Wyjdź lub naciśnij ShiftF11.

    przycisk Step-Out

    W terminalu zostanie wyświetlony komunikat "Naciśnij dowolny klawisz, aby zakończyć..."

  11. Naciśnij dowolny, aby zamknąć program.

Użyj konfiguracji kompilacji Release

Po przetestowaniu wersji Debug aplikacji należy również skompilować i przetestować wersję Release. Wersja wydania zawiera optymalizacje kompilatora, które czasami negatywnie wpływają na zachowanie aplikacji. Na przykład optymalizacje kompilatora, które mają na celu poprawę wydajności, mogą tworzyć warunki wyścigu w aplikacjach wielowątkowych.

Aby zbudować i przetestować wersję Release aplikacji konsolowej, zmień konfigurację kompilacji na pasku narzędzi z Debug na Release.

domyślny pasek narzędzi Visual Studio z wyróżnioną wersją wydania

Po naciśnięciu F5 lub wybraniu "Build Solution" z menu Build, Visual Studio kompiluje wersję wydania aplikacji. Można ją przetestować tak, jak przetestowałeś wersję debug.

Aby skompilować i przetestować wersję wydania aplikacji konsolowej, otwórz Terminal i uruchom następujące polecenie:

dotnet run --configuration Release

Aby skompilować i przetestować wersję wydania aplikacji konsolowej, uruchom następujące polecenie w terminalu:

dotnet run --configuration Release HelloWorld.cs

Dalsze kroki

W tym samouczku użyto narzędzi do debugowania. W następnym samouczku opublikujesz wersję gotową do wdrożenia aplikacji.