Informacje o debugerze .NET w programie Visual Studio Code

Ukończone

W poprzedniej lekcji pokazano, że debuger pomaga kontrolować wykonywanie programu i obserwować jego stan. W tej sekcji dowiesz się, jak wykonać oba te zadania w programie Visual Studio Code.

Zacznijmy od informacji na temat sposobu konfigurowania debugera programu Visual Studio Code do używania go w środowisku .NET.

Konfigurowanie programu Visual Studio Code na potrzeby debugowania platformy .NET

Po pierwszym otwarciu pliku z kodem C# w programie Visual Studio Code zostanie wyświetlony monit o zainstalowanie zalecanych rozszerzeń dla języka C#.

Screenshot of Visual Studio Code prompt to install the C# extension.

Program Visual Studio Code zainstaluje rozszerzenie dla języka C# i wyświetli kolejny monit o dodanie wymaganych elementów zawartości na potrzeby kompilowania i debugowania projektu.

Screenshot of Visual Studio Code prompt to add required assets to build and debug your .NET project.

Uwaga

Obsługa języka C# w programie Visual Studio Code to opcjonalna instalacja z witryny Marketplace. Program Visual Studio Code automatycznie wyświetla monit o zainstalowanie tego rozszerzenia po otwarciu pliku języka C#, jeśli jeszcze tego nie zrobiono. Jeśli masz problemy z kompilowaniem lub debugowaniem aplikacji .NET w programie Visual Studio Code, sprawdź, czy projekt ma zasoby wymagane do obsługi języka C#.

Punkty przerwania

Jak pokazano w poprzedniej lekcji, debuger pomaga analizować i kontrolować wykonywanie programu. Debuger programu Visual Studio Code rozpoczyna on wykonywanie kodu natychmiast po uruchomieniu. Ponieważ kod jest wykonywany szybko, musisz mieć możliwość wstrzymania programu na poziomie dowolnej instrukcji. W tym celu możesz użyć punktów przerwania.

Punkt przerwania można dodać w programie Visual Studio Code, klikając lewą stronę numeru wiersza w wierszu, który chcesz przerwać. Gdy punkt przerwania zostanie włączony, powinno być widoczne czerwone kółko. Aby go usunąć, wybierz ponownie czerwone kółko.

Screenshot of a breakpoint added in the Visual Studio Code editor window.

Jeśli klikniesz prawym przyciskiem myszy, aby dodać punkt przerwania, możesz również wybrać opcję Dodaj warunkowy punkt przerwania. Ten specjalny rodzaj punktu przerwania umożliwia wprowadzenie warunku wykonywania przerwania. Ten punkt przerwania będzie aktywny tylko w przypadku spełnienia określonego warunku. Możesz również zmodyfikować istniejący punkt przerwania, klikając go prawym przyciskiem myszy i wybierając polecenie Edytuj punkt przerwania.

Screenshot of setting a conditional breakpoint in Visual Studio Code.

Omówienie debugera programu Visual Studio Code

Po skonfigurowaniu punktów przerwania i uruchomieniu aplikacji na ekranie pojawią się nowe panele informacji i kontrolki.

Screenshot of Visual Studio Code debugger overview.

  1. Kontrolki uruchamiania debugera
  2. Stan zmiennych
  3. Stan obserwowanych zmiennych
  4. Bieżący stos wywołań
  5. Punkty przerwania
  6. Kontrolki wykonywania
  7. Bieżący krok wykonania
  8. Konsola debugowania

Kontrolki uruchamiania debugera

W górnej części paska bocznego znajdują się kontrolki uruchamiania:

Screenshot of Visual Studio Code debug sidebar controls.

  1. Uruchom debugowanie.
  2. Wybierz aktywną konfigurację uruchamiania.
  3. Edytuj plik launch.json. Utwórz go w razie potrzeby.
  4. Otwórz terminal debugowania.

Wyświetlanie i edytowanie stanu zmiennych

Podczas analizowania przyczyny wady programu sprawdź stan zmiennych, aby wyszukać nieoczekiwane zmiany. W tym celu można użyć panelu Zmienne.

Zmienne są uporządkowane według zakresu:

  • Zmienne lokalne są dostępne w bieżącym zakresie, zazwyczaj w bieżącej funkcji.
  • Zmienne globalne są dostępne z każdego miejsca w programie. Obejmuje to również obiekty systemowe ze środowiska uruchomieniowego JavaScript, więc nie zdziw się, jeśli w tym miejscu zobaczysz wiele elementów.
  • Zmienne zamknięcia są dostępne z bieżącego zamknięcia, o ile istnieją. Zamknięcie łączy lokalny zakres funkcji z zakresem funkcji zewnętrznej, do której należy.

Zakresy i zmienne można rozwijać, wybierając strzałkę. Po rozwinięciu obiektów można zobaczyć wszystkie właściwości zdefiniowane w obiekcie.

Można zmienić wartość zmiennej na bieżąco, klikając dwukrotnie zmienną.

Po umieszczeniu wskaźnika myszy na parametrze funkcji lub zmiennej bezpośrednio w oknie edytora można również zajrzeć do jego wartości.

Screenshot of variable hover during debugging.

Obserwowanie zmiennych

Wyszukiwanie stanu zmiennej za każdym razem, gdy chcesz śledzić go w czasie lub w różnych funkcjach, może być żmudne. Tu przydaje się panel Śledzenie.

Możesz wybrać przycisk Plus, aby wprowadzić nazwę zmiennej lub wyrażenie do obejrzenia. Alternatywnie możesz kliknąć prawym przyciskiem myszy zmienną w panelu Zmienne i wybrać pozycję Dodaj do śledzenia.

Wszystkie wyrażenia w panelu zegarka są aktualizowane automatycznie w miarę uruchamiania kodu.

Stos wywołań

Za każdym razem, gdy program wywołuje funkcję, do stosu wywołań jest dodawany wpis. Gdy aplikacja staje się złożona i funkcje są wielokrotnie wywoływane w obrębie innych funkcji, stos wywołań reprezentuje ślad wywołań funkcji.

Przydaje się to podczas szukania źródła wyjątku. Jeśli w programie wystąpi nieoczekiwana awaria, w konsoli często jest widoczne coś takiego, co widać na poniższym przykładzie:

Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at OrderProcessor.OrderQueue.ProcessNewOrders(String[] orderIds) in C:\Users\Repos\OrderProcessor\OrderQueue.cs:line 12
   at OrderProcessor.Program.Main(String[] args) in C:\Users\Repos\OrderProcessor\Program.cs:line 9

Grupa wierszy at [...] poniżej komunikatu o błędzie jest nazywana śladem stosu. Ślad stosu zawiera nazwę i źródło każdej funkcji, która została wywołana przed zakończeniem z wyjątkiem. Może to być nieco trudne do odszyfrowania, ponieważ obejmuje również funkcje wewnętrzne ze środowiska uruchomieniowego platformy .NET.

Tutaj przydaje się panel Stos wywołań programu Visual Studio Code. Odfiltrowuje on niechciane informacje, aby pokazać tylko istotne funkcje z Twojego własnego kodu. Dzięki temu możesz rozwinąć stos wywołań, aby dowiedzieć się, jakie jest źródło wyjątku.

Panel punktów przerwania

W panelu Punkty przerwania można wyświetlać i przełączać wszystkie punkty przerwania umieszczone w kodzie. Można także przełączać opcje, aby przerywać na przechwyconych lub nieprzechwyconych wyjątkach. Korzystając z panelu Punkty przerwania, możesz zbadać stan programu i prześledzić źródło wyjątku, gdy taki wystąpi, przy użyciu panelu Stos wywołań.

Kontrolowanie wykonywania

Możesz kontrolować przepływ wykonywania programu przy użyciu następujących kontrolek.

Screenshot of Visual Studio Code debugger execution controls.

Od lewej do prawej kontrolki są następujące:

  • Kontynuuj lub wstrzymaj wykonywanie: jeśli wykonanie zostanie wstrzymane, będzie kontynuowane do momentu osiągnięcia następnego punktu przerwania. Jeśli program jest uruchomiony, przycisk zamienia się na przycisk wstrzymania, przy użyciu którego można wstrzymać wykonywanie.
  • Krok po kroku: wykonuje następną instrukcję kodu w bieżącym kontekście.
  • Krok do: Podobnie jak w kroku, ale jeśli następna instrukcja jest wywołaniem funkcji, przejdź do pierwszej instrukcji kodu tej funkcji (tak samo jak step polecenie).
  • Wyjdź: jeśli jesteś wewnątrz funkcji, wykonaj pozostały kod tej funkcji i wróć do instrukcji po początkowym wywołaniu funkcji (tak samo jak out polecenie).
  • Uruchom ponownie: uruchom ponownie program od początku.
  • Zatrzymaj: zakończ wykonywanie i zamknij debuger.

Korzystanie z konsoli debugowania

Konsolę debugowania można pokazać lub ukryć, wybierając klawisze Ctrl+Shift+Y dla systemów Windows i Linux. Na komputerach Mac należy nacisnąć klawisze Cmd+Shift+Y. Konsolę debugowania można użyć do wizualizacji dzienników konsoli aplikacji. Można go również użyć do oceny wyrażeń lub wykonywania kodu w bieżącej zawartości wykonywania, takich jak polecenia lub nazwy zmiennych we wbudowanym debugerze platformy .NET.

Możesz wprowadzić wyrażenie .NET w polu wejściowym w dolnej części konsoli debugowania, a następnie wybrać klawisz Enter , aby go ocenić. Wynik zostanie wyświetlony bezpośrednio w konsoli.

Screenshot of Visual Studio Code debug console.

Korzystając z konsoli debugowania, możesz szybko sprawdzić wartość zmiennej, przetestować funkcję z różnymi wartościami lub zmienić bieżący stan.

Uwaga

Chociaż konsola debugowania jest bardzo przydatna do wykonywania i oceniania kodu platformy .NET, może to być nieco mylące, gdy próbujesz wykonać lub debugować aplikację konsolową platformy .NET, ponieważ konsola debugowania nie akceptuje danych wejściowych terminalu dla uruchomionego programu.

Aby obsługiwać dane wejściowe terminalu podczas debugowania, można użyć terminalu zintegrowanego (jednego z okien programu Visual Studio Code) lub terminalu zewnętrznego. W tym samouczku użyjesz zintegrowanego terminalu.

  1. Otwórz plik .vscode/launch.json.

  2. Zmień ustawienie console na integratedTerminal z:

    "console": "internalConsole",
    

    Do:

    "console": "integratedTerminal",
    
  3. Zapisz zmiany.

W następnej lekcji dowiesz się, jak naprawić usterkę w przedstawionym wcześniej kodzie Fibonacciego, korzystając z debugera.