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 zbadać ścieżkę wykonywania kodu i inne. Jeśli po raz pierwszy próbujesz debugować kod, przed rozpoczęciem pracy z tym tematem 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, w których to zaznaczono).

Ustawianie punktu przerwania i uruchamianie debugera

Punkty przerwania są przydatną funkcją, gdy znasz wiersz kodu lub sekcję kodu, którą chcesz dokładnie 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 > debugowania) 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 zrobimy to najpierw, 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 temu, czy uruchamiana jest gałąź kodu.

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

Ustawianie punktu przerwania

Naciśnij klawisz F5 (debuguj > rozpocznij debugowanie) lub przycisk 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 wykonywanie aplikacji po jednej instrukcji na raz. Po uruchomieniu aplikacji za pomocą klawisza F11 debuger przerywa pierwszą wykonywaną instrukcje.

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 postęp 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 przejść 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).

Krok do właściwości

Jak wspomniano wcześniej, domyślnie debuger pomija zarządzane właściwości i pola, ale polecenie Step Into Specific umożliwia zastąpienie tego zachowania.

Kliknij prawym przyciskiem myszy właściwość lub pole i wybierz polecenie Krok do określonego , a następnie wybierz jedną z dostępnych opcji.

Zrzut ekranu Visual Studio debugera z wyróżnionym wierszem kodu. W menu kontekstowym jest zaznaczona opcja Step Into Specific, a w menu kontekstowym jest wybrana metoda Path.set.

W tym przykładzie krok do określonego pobiera nas do kodu dla Path.set .

Zrzut ekranu przedstawiający Visual Studio debugera z kodem path.set. Nawiasy klamrowe otaczające funkcję set są wyróżnione kolorem żółtym.

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 pokazujący przycisk Uruchom do kliknięcia wyświetlany po lewej stronie wywołania funkcji Update.

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 jest przekierowywyny do wiersza kodu, w którym został klikowany.

Przekieruj debuger poza bieżącą funkcję

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

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

To polecenie wznawia wykonywanie aplikacji (i dodaje debuger) do momentu, gdy bieżąca funkcja zwróci wartość .

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

Jeśli ustawiono punkty przerwania, debuger jest wstrzymywany w pierwszym punkcie 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 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 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 i 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 domyślną wartość właściwości (w tym przykładzie nazwa pliku jest wartością market 031.jpg właściwości domyślnej).

Wyświetlanie porady dotyczącej danych

Rozwiń obiekt , aby wyświetlić wszystkie jego właściwości (na przykład FullPath właściwość w tym przykładzie).

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 przy użyciu 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 zmiennych lokalnych).

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

Okno autos

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

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.

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

W tym przykładzie obiekt ma ustawiony zegarek, a jego wartość zmienia się podczas przechodzenia f 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ę Update (metodę w tym przykładzie). Drugi wiersz pokazuje, że Update został wywołany z Path.set właściwości 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ń

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ępów debugera.

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 ścieżka System.Argument nie jest formą prawna. Wiemy więc, że błąd wystąpił dla metody lub argumentu 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. Możesz też w razie potrzeby 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 projekt prawym przyciskiem myszy w oknie Eksplorator rozwiązań 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 typu projektu.

Project właściwości

Debugowanie aplikacji ASP.NET na żywo w programie 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 można było szybko przyjrzeć się wielu funkcji debugera. Możesz bardziej szczegółowo przyjrzeć się jednej z tych funkcji, na przykład punktom przerwania.