Pierwsze spojrzenie na Visual Studio debugera

W tym temacie oprowadzono narzędzia debugera udostępniane przez Visual Studio. W Visual Studio debugowania aplikacji zwykle oznacza to, że aplikacja jest uruchamiana z dołączonym debugerem (czyli w trybie debugera). Gdy to zrobisz, debuger udostępnia wiele sposobów na zobaczenie działania kodu podczas jego działania. Możesz przejść przez kod i przyjrzeć się wartościom przechowywanym w zmiennych. Możesz ustawić czasomierze zmiennych, aby zobaczyć, kiedy wartości zmieniają się, możesz sprawdzić ścieżkę wykonywania kodu i inne. Jeśli po raz pierwszy próbujesz debugować kod, przed rozpoczęciem tego tematu warto zapoznać się z tematem Debugowanie dla bezwzględnych początkujących użytkowników.

Opisane tutaj funkcje mają zastosowanie do języków C#, C++, Visual Basic, JavaScript i innych języków obsługiwanych przez Visual Studio (z wyjątkiem sytuacji, gdy jest to odnotowane).

Ustawianie punktu przerwania i uruchamianie debugera

Punkty przerwania są przydatną funkcją, gdy znasz wiersz kodu lub sekcję kodu, którą chcesz szczegółowo zbadać w czasie wykonywania. Aby uzyskać więcej informacji na temat różnych typów punktów przerwania, takich jak warunkowe punkty przerwania i punkty przerwania funkcji, zobacz Używanie punktów przerwania.

Aby debugować, musisz uruchomić aplikację z debugerem dołączonym do procesu aplikacji. F5 (Debugowanie > rozpocznij debugowanie) to najbardziej powszechny sposób, aby to zrobić. Jednak w tej chwili być może nie ustawiono żadnych punktów przerwania w celu zbadania kodu aplikacji, dlatego najpierw to zrobimy, a następnie rozpoczniemy debugowanie. Punkty przerwania to najbardziej podstawowa i najważniejsza funkcja niezawodnego debugowania. Punkt przerwania wskazuje, gdzie Visual Studio powinien wstrzymać uruchomiony kod, aby można było przyjrzeć się wartościom zmiennych, zachowaniu pamięci lub czy gałąź kodu jest uruchamiana.

Jeśli masz otwarty plik w edytorze kodu, możesz ustawić punkt przerwania, klikając margines z lewej strony wiersza kodu.

Ustawianie punktu przerwania

Ustawianie punktu przerwania

Naciśnij klawisz F5 (Debuguj > Rozpocznij debugowanie) lub przycisk Rozpocznij debugowanie Rozpocznij debugowanie na pasku narzędzi debugowania, a debuger zostanie uruchomiony do pierwszego napotkania punktu przerwania. Jeśli aplikacja nie jest jeszcze uruchomiona, klawisz F5 uruchamia debuger i zatrzymuje się w pierwszym punkcie przerwania.

W przypadku większości poleceń dostępne są skróty klawiaturowe, ponieważ pozwalają one szybciej nawigować po kodzie aplikacji. (Równoważne polecenia, takie jak polecenia menu, są wyświetlane w nawiasach). Aby uzyskać więcej informacji na temat używania poleceń kroku, zobacz Navigate code in the debugger (Nawigowanie po kodzie w debugerze).

Aby uruchomić aplikację z dołączonym debugerem, naciśnij klawisz F11 (Debuguj >Krok do). Klawisz F11 to polecenie Step Into, które umożliwia wykonanie aplikacji po jednej instrukcji na raz. Po uruchomieniu aplikacji za pomocą klawisza F11 debuger przerywa pierwszą wykonywaną instrukcje.

F11 Step Into

F11 Step Into

Żółta strzałka reprezentuje instrukcje, na których debuger został wstrzymany, co również wstrzymuje wykonywanie aplikacji w tym samym momencie (ta instrukcja nie została jeszcze wykonana).

F11 to dobry sposób na szczegółowe zbadanie przepływu wykonywania. (Aby szybciej przechodzić przez kod, pokazujemy również inne opcje). Domyślnie debuger pomija kod niebędący użytkownikiem (jeśli chcesz uzyskać więcej szczegółów, zobacz Tylko mój kod).

Uwaga

W kodzie zarządzanym zostanie wyświetlone okno dialogowe z pytaniem, czy chcesz być powiadamiany, gdy automatycznie przejedzesz właściwości i operatory (zachowanie domyślne). Jeśli chcesz później zmienić to ustawienie, wyłącz ustawienie Przekłoń właściwości i operatory w menu Narzędzia > opcje w obszarze Debugowanie.

Przechodzenie przez kod w celu pominięcia funkcji

Gdy znajdujesz się w wierszu kodu, który jest funkcją lub wywołaniem metody, możesz nacisnąć klawisz F10 (Debuguj >Przekłoć) zamiast klawisza F11.

Klawisz F10 umożliwia przechodzenie do debugera bez przechodzenia do funkcji lub metod w kodzie aplikacji (kod jest nadal wykonywany). Naciskając klawisz F10, możesz pominąć kod, który Cię nie interesuje. Dzięki temu możesz szybko uzyskać dostęp do kodu, który Cię bardziej interesuje. Aby uzyskać więcej informacji na temat używania poleceń kroku, zobacz Navigate code in the debugger (Nawigowanie po kodzie w debugerze).

Szybkie uruchamianie do punktu w kodzie za pomocą myszy

Użycie przycisku Uruchom do kliknięcia jest podobne do ustawiania tymczasowego punktu przerwania. To polecenie jest również przydatne do szybkiego poruszania się w widocznym regionie kodu aplikacji. Można użyć Uruchom, aby kliknąć w dowolnym otwartym pliku. Aby uzyskać więcej informacji na temat tej funkcji i podobnych funkcji nawigacji, zobacz Uruchamianie w określonej lokalizacji w kodzie.

W debugerze zatrzymaj wskaźnik myszy na wierszu kodu, aż do przycisku Uruchom do kliknięcia (uruchom wykonywanie do tego momentu) Zrzut ekranu przedstawiający przycisk Uruchom do kliknięcia w Visual Studio  Debuger. Przycisk wskazuje, że wykonanie powinno zostać uruchomione do wiersza, w którym znajduje się przycisk. po lewej stronie.

Zrzut ekranu Visual Studio debugera przedstawiający przycisk Uruchom do kliknięcia wyświetlany po lewej stronie wywołania funkcji.

Zrzut ekranu Visual Studio debugera przedstawiający przycisk Uruchom do kliknięcia wyświetlany po lewej stronie wywołania funkcji.

Uwaga

Przycisk Uruchom do kliknięcia (Uruchom wykonywanie do tego miejsca) jest dostępny w programie Visual Studio 2017 .

Kliknij przycisk Uruchom do kliknięcia (Uruchom wykonywanie tutaj). Debuger zostanie przejść do wiersza kodu, w którym został klikowany.

Postęp debugera poza bieżącą funkcją

Czasami możesz chcieć kontynuować sesję debugowania, ale przejść do debugera do całej bieżącej funkcji.

Naciśnij klawisze Shift + F11 (lub debuguj > wyjść).

To polecenie wznawia wykonywanie aplikacji (i umożliwia postęp debugera) do momentu powrotu bieżącej funkcji.

Uruchom do kursora

Podczas edytowania kodu (a nie wstrzymania w debugerze) kliknij prawym przyciskiem myszy wiersz kodu w aplikacji i wybierz polecenie Uruchom do kursora (lub naciśnij klawisze Ctrl do klawisza F10). To polecenie rozpoczyna debugowanie i ustawia tymczasowy punkt przerwania w bieżącym wierszu kodu. Aby uzyskać więcej informacji na temat tej funkcji i podobnych funkcji nawigacji, zobacz Uruchamianie w określonej lokalizacji w kodzie.

Uruchom do kursora

Uruchom do kursora

Jeśli ustawiono punkty przerwania, debuger wstrzymuje pierwszego punktu przerwania, który trafi.

Naciskaj klawisz F5, aż dotrzesz do wiersza kodu, w którym wybrano opcję Uruchom do kursora.

To polecenie jest przydatne, gdy edytujesz kod i chcesz szybko ustawić tymczasowy punkt przerwania i uruchomić debuger w tym samym czasie.

Uwaga

Podczas debugowania możesz użyć polecenia Uruchom do kursora w oknie stosu wywołań.

Szybkie ponowne uruchamianie aplikacji

Kliknij przycisk Uruchom ponownie ponownie aplikację na pasku narzędzi debugowania (lub naciśnij klawisze Ctrl + Shift + F5).

Naciśnięcie przycisku Uruchom ponownie pozwala zaoszczędzić czas w porównaniu z zatrzymywaniem aplikacji i ponownym uruchamianiem debugera. Debuger jest wstrzymywany w pierwszym punkcie przerwania, który zostanie trafiony przez wykonanie kodu.

Jeśli chcesz zatrzymać debuger i wrócić do edytora kodu, możesz nacisnąć czerwony przycisk Zatrzymaj zatrzymywanie debugowania zamiast przycisku Uruchom ponownie.

Edytowanie kodu na żywo

Visual Studio 2022 obsługuje edytowanie kodu na żywo podczas debugowania. Aby uzyskać szczegółowe informacje, zobacz:

Edytowanie kodu i kontynuowanie debugowania (C#, VB, C++, XAML)

W większości języków obsługiwanych Visual Studio można edytować kod w trakcie sesji debugowania i kontynuować debugowanie. Aby użyć tej funkcji, kliknij swój kod za pomocą kursora, gdy został wstrzymany w debugerze, dokonaj edycji, a następnie naciśnij klawisz F5, F10 lub F11, aby kontynuować debugowanie. Aby uzyskać więcej informacji na temat korzystania z tej funkcji i ograniczeń funkcji, zobacz Edytuj i kontynuuj.

Edytowanie i kontynuowanie debugowania

Aby zmodyfikować kod XAML podczas sesji debugowania, zobacz Pisanie i debugowanie uruchomionego kodu XAMLza pomocą Przeładowywanie kodu XAML na gorąco .

Sprawdzanie zmiennych za pomocą porad dotyczących danych

Teraz, gdy znasz już nieco swoją dobrą praktykę, możesz rozpocząć inspekcję stanu aplikacji (zmiennych) za pomocą debugera. Funkcje, które umożliwiają sprawdzanie zmiennych, to niektóre z najbardziej przydatnych funkcji debugera. Istnieją różne sposoby ich sprawdzania. Często podczas próby debugowania problemu próbujesz dowiedzieć się, czy zmienne przechowują wartości, których oczekujesz, w określonym stanie aplikacji. Aby uzyskać szczegółowe informacje na temat korzystania z porad dotyczących danych, zobacz Wyświetlanie wartości danych w poradach dotyczących danych.

Po wstrzymaniu w debugerze umieść kursor nad obiektem za pomocą myszy i zobaczysz jego wartość lub domyślną wartość właściwości.

Wyświetlanie porady dotyczącej danych

Wyświetlanie porady dotyczącej danych

Jeśli zmienna ma właściwości, możesz rozwinąć obiekt, aby wyświetlić wszystkie jego właściwości.

Często podczas debugowania chcesz szybko sprawdzić wartości właściwości obiektów, a porady dotyczące danych są dobrym sposobem na to.

Porada

W większości obsługiwanych języków można edytować kod w trakcie sesji debugowania. Aby uzyskać więcej informacji, zobacz Edit and Continue (Edytuj i kontynuuj).

Sprawdzanie zmiennych za pomocą okien Zmiennych automatycznych i Zmiennych lokalnych

W oknie Autos (Automatyczne) zobaczysz zmienne wraz z ich bieżącą wartością i ich typem. Okno Automatyczne wyświetla wszystkie zmienne używane w bieżącym wierszu lub poprzednim wierszu (w języku C++ w oknie są używane zmienne w poprzednich trzech wierszach kodu. Zapoznaj się z dokumentacją dotyczącą zachowania specyficznego dla języka). Aby uzyskać więcej informacji na temat korzystania z tych okien, zobacz Inspect variables in the Autos and Locals windows(Sprawdzanie zmiennych w oknach Zmiennych automatycznych i lokalnych).

Podczas debugowania przyjrzyj się oknie Automatyczne w dolnej części edytora kodu.

Okno automatyczne

Okno automatyczne

Uwaga

W języku JavaScript okno Ustawienia lokalne jest obsługiwane, ale nie okno Automatyczne.

Następnie przyjrzyj się oknie Locals (Lokalne). Okno Zmienne lokalne zawiera zmienne, które są obecnie w zakresie.

Okno lokalizacji lokalnych

Okno lokalizacji lokalnych

W tym przykładzie this obiekt i obiekt znajdują się w f zakresie. Aby uzyskać więcej informacji, zobacz Inspect Variables in the Autos and Locals Windows(Sprawdzanie zmiennych w zmiennych automatycznych i zmiennych Windows ).

Ustawianie zegarka

W oknie Wyrażenie czujki można określić zmienną (lub wyrażenie), którą chcesz śledzić. Aby uzyskać szczegółowe informacje, zobacz Ustawianie zegarka przy użyciu funkcji Watch i QuickWatch Windows.

Podczas debugowania kliknij prawym przyciskiem myszy obiekt i wybierz polecenie Dodaj czujkę.

Okno czujki

Okno czujki

W tym przykładzie obiekt ma ustawiony zegarek, a jego wartość zmienia się podczas przechodzenia przez debuger. W przeciwieństwie do innych okien zmiennych okna czujki zawsze pokazują zmienne, które obserwujesz (są one wyszarowane, gdy są poza zakresem).

Badanie stosu wywołań

Okno Stos wywołań pokazuje kolejność wywoływania metod i funkcji. Górny wiersz pokazuje bieżącą funkcję. Drugi wiersz przedstawia funkcję lub właściwość, z których została wywołana, i tak dalej. Stos wywołań to dobry sposób na zbadanie i zrozumienie przepływu wykonywania aplikacji. Aby uzyskać szczegółowe informacje, zobacz Instrukcje: badanie stosu wywołań.

Uwaga

Okno stosu wywołań jest podobne do perspektywy debugowania w niektórych środowiskach PROJEKTOWYCH, takich jak Eclipse.

Podczas debugowania kliknij okno Stos wywołań, które jest domyślnie otwarte w prawym dolnym okienku.

Badanie stosu wywołań

Badanie stosu wywołań

Możesz kliknąć dwukrotnie wiersz kodu, aby przejść do tego kodu źródłowego i zmienić bieżący zakres sprawdzany przez debuger. Nie powoduje to postępu w debugerze.

Możesz również użyć menu otwieranych prawym przyciskiem myszy w oknie stosu wywołań, aby wykonać inne czynności. Możesz na przykład wstawić punkty przerwania do określonych funkcji, ponownie uruchomić aplikację przy użyciu funkcji Uruchom do kursora i przejść do analizy kodu źródłowego.

Sprawdzanie wyjątku

Gdy aplikacja zgłasza wyjątek, debuger przekieruje Cię do wiersza kodu, który przerzucił wyjątek. Aby uzyskać szczegółowe informacje, zobacz Inspekcja wyjątku przy użyciu pomocnika wyjątków.

Pomocnik wyjątków

W tym przykładzie Pomocnik wyjątków pokazuje wyjątek i komunikat o błędzie informujący, że odwołanie do obiektu nie jest ustawione na System.NullReferenceException wystąpienie obiektu. I informuje nas, że wartość ciągu miała wartość null podczas próby wywołania Trim metody .

Pomocnik wyjątków

W tym przykładzie Pomocnik wyjątków pokazuje wyjątek i komunikat o błędzie informujący, że ścieżka System.Argument nie jest formą prawna. Wiemy więc, że błąd wystąpił w metodzie lub argumentie funkcji.

W tym przykładzie DirectoryInfo wywołanie dało błąd w pustym ciągu przechowywanym w value zmiennej .

Pomocnik wyjątków jest świetną funkcją, która może pomóc w debugowaniu błędów. Możesz również wyświetlać szczegóły błędów i dodawać zegarek z pomocnika wyjątków. Lub, w razie potrzeby, można zmienić warunki zgłaszania określonego wyjątku. Aby uzyskać więcej informacji na temat obsługi wyjątków w kodzie, zobacz Narzędzia i techniki debugowania.

Rozwiń węzeł Ustawienia wyjątków, aby wyświetlić więcej opcji obsługi tego typu wyjątku, ale nie musisz niczego zmieniać w tym przewodniku.

Konfigurowanie debugowania

Projekt można skonfigurować do kompilacji jako konfigurację debugowanialub wydania, skonfigurować właściwości projektu na potrzeby debugowania lub skonfigurować ustawienia ogólne na potrzeby debugowania. Ponadto można skonfigurować debuger do wyświetlania niestandardowych informacji przy użyciu funkcji, takich jak atrybut DebuggerDisplay lub, w przypadku języka C/C++, framework NatVis.

Właściwości debugowania są specyficzne dla każdego typu projektu. Można na przykład określić argument do przekazania do aplikacji po jej uruchomieniu. Aby uzyskać dostęp do właściwości specyficznych dla projektu, kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań i wybierz pozycję Właściwości. Właściwości debugowania są zwykle wyświetlane na karcie Kompilacja lub Debugowanie w zależności od konkretnego typu projektu.

Począwszy od Visual Studio 2022 r., karta Debugowanie dla projektów .NET zawiera link do interfejsu użytkownika profilów uruchamiania debugowania, w którym można ustawić właściwości związane z debugowaniem.

Project właściwości

Project właściwości

Debugowanie aplikacji ASP.NET na żywo w Azure App Service

Aplikacja Snapshot Debugger migawkę aplikacji w środowisku produkcyjnym, gdy kod jest zainteresowany wykonaniem. Aby nakłonić debuger do utworzenia migawki, należy ustawić punkty przyciągania i punkty rejestrowania w kodzie. Debuger pozwala zobaczyć dokładnie, co poszło nie tak, bez wpływu na ruch aplikacji produkcyjnej. Ten Snapshot Debugger znacznie skrócić czas rozwiązywania problemów, które występują w środowiskach produkcyjnych.

Uruchamianie debugera migawek

Kolekcja migawek jest dostępna dla ASP.NET działających w Azure App Service. ASP.NET muszą być uruchomione w programie .NET Framework 4.6.1 lub nowszym, a aplikacje ASP.NET Core muszą być uruchomione na programie .NET Core 2.0 lub nowszym na Windows.

Aby uzyskać więcej informacji, zobacz Debugowanie aplikacji ASP.NET na żywo przy użyciu Snapshot Debugger.

Wyświetlanie migawek za pomocą funkcji Cofka IntelliTrace (Visual Studio Enterprise)

Funkcja IntelliTrace Step-Back automatycznie tworzy migawkę aplikacji w każdym punkcie przerwania i z każdym zdarzeniem kroku debugera. Zarejestrowane migawki umożliwiają powrót do poprzednich punktów przerwania lub kroków i wyświetlenie stanu aplikacji w przeszłości. Krok do tyłu funkcji IntelliTrace pozwala zaoszczędzić czas, gdy chcesz zobaczyć poprzedni stan aplikacji, ale nie chcesz ponownie uruchamiać debugowania ani odtwarzać żądanego stanu aplikacji.

Migawki można nawigować i wyświetlać za pomocą przycisków Krok do tyłu i Krok do przodu na pasku narzędzi Debugowanie. Te przyciski umożliwiają nawigację po zdarzeniach, które są wyświetlane na karcie Zdarzenia narzędzia diagnostyczne oknie.

Przyciski Krok do tyłu i Do przodu

Aby uzyskać więcej informacji, zobacz stronę Inspect previous app states using IntelliTrace (Sprawdzanie poprzednich stanów aplikacji przy użyciu funkcji IntelliTrace).

Debugowanie problemów z wydajnością

Jeśli aplikacja działa zbyt wolno lub używa zbyt dużej ilości pamięci, może być konieczne wcześniejsze przetestowanie aplikacji przy użyciu narzędzi profilowania. Aby uzyskać więcej informacji na temat narzędzi profilowania, takich jak narzędzie Użycie procesora CPU i Analizator pamięci, zobacz Pierwsze spojrzenie na narzędzia profilowania.

Następne kroki

W tym samouczku popatrzyliśmy szybko na wiele funkcji debugera. Możesz bardziej szczegółowo przyjrzeć się jednej z tych funkcji, na przykład punktom przerwania.