Udostępnij za pośrednictwem


Nawigowanie po kodzie przy użyciu debugera programu Visual Studio

Debuger programu Visual Studio może ułatwić przechodzenie przez kod w celu sprawdzenia stanu aplikacji i pokazania przepływu wykonywania, który jest również znany jako krok po kodzie. Możesz użyć skrótów klawiaturowych, poleceń debugowania, punktów przerwania i innych funkcji, aby szybko uzyskać dostęp do kodu, który chcesz zbadać. Dzięki zapoznaniu się z poleceniami i skrótami nawigacji debugera można znaleźć i rozwiązać problemy z aplikacjami szybciej i łatwiej. Aby uzyskać listę najczęściej używanych skrótów klawiaturowych związanych z nawigacją i debugowaniem kodu, zobacz sekcję Debugowanie w skrótach klawiaturowych.

Uwaga / Notatka

Jeśli dopiero zaczynasz debugować kod, możesz przeczytać artykuł Debugowanie dla początkujących i technik debugowania oraz narzędzi przed przeczytaniem tego artykułu.

Rozpocznij debugowanie i wprowadź tryb przerwania

Niektóre polecenia nawigacyjne uruchamiają aplikację i automatycznie podłączają debugera. Aplikacja wstrzymuje się w określonym wierszu kodu na podstawie polecenia użytego do uruchomienia nawigacji, a następnie wprowadza tryb przerwania (czyli aplikacja jest wstrzymana w debugerze).

W trybie przerwania wykonywanie aplikacji jest zawieszone, gdy funkcje, zmienne i obiekty pozostają w pamięci. Gdy debuger jest w trybie przerwania, możesz nawigować po swoim kodzie. Istnieją dwa bardzo typowe sposoby szybkiego wprowadzania trybu przerwania:

  • Ustaw punkt przerwania i uruchom aplikację.

  • Biegnij do określonej lokalizacji lub funkcji.

    Na przykład w edytorze kodu w programie Visual Studio możesz użyć polecenia Uruchom do kursora , aby uruchomić aplikację z dołączonym debugerem i wprowadzić tryb przerwania. Następnie możesz użyć poleceń kroków, aby nawigować po kodzie.

    Animacja przedstawiająca wybranie polecenia Uruchom do kursora, a następnie F11.

    Animacja przedstawiająca wybranie polecenia Uruchom do kursora, a następnie F11.

Polecenia kroku kodu mogą służyć do uruchamiania aplikacji, ale są częściej używane po wprowadzeniu trybu przerwania.

Niektóre polecenia nawigacji są najczęściej używane w trybie przerwania (czyli podczas wstrzymania w debugerze).

Tryb debugowania i tryb przerwania działania

W trybie przerwania możesz użyć różnych poleceń do nawigowania po kodzie. Możesz sprawdzić wartości zmiennych, aby wyszukać naruszenia lub błędy. W przypadku niektórych typów projektów można również wprowadzić zmiany w aplikacji w trybie przerwania.

Większość okien debugera, takich jak moduły i okna Watch , jest dostępna tylko wtedy, gdy debuger jest dołączony do aplikacji. Niektóre funkcje debugera, takie jak wyświetlanie wartości zmiennych w oknie Ustawienia lokalne lub ocenianie wyrażeń w oknie Watch , są dostępne tylko wtedy, gdy debuger jest wstrzymany (czyli w trybie przerwania).

Uwaga / Notatka

Jeśli wejdziesz w kod, który nie ma załadowane plików źródłowych lub symboli (.pdb), debuger wyświetla stronę Nie znaleziono plików źródłowych lub Nie znaleziono symboli, która może pomóc w znalezieniu i załadowaniu plików. Zobacz także Określ symbol (.pdb) oraz pliki źródłowe. Jeśli nie możesz załadować symbolu lub plików źródłowych, nadal możesz debugować instrukcje dotyczące zestawu w oknie Dezasemblacji .

Krok po kodzie

Code stepping odnosi się do wykonywania kodu aplikacji instrukcja po instrukcji, z dołączonym debugerem. Polecenia kroku debugera ułatwiają obserwowanie efektów każdej instrukcji oraz dowiedzenie się więcej o przepływie wykonywania.

Wejdź do kodu

Aby zatrzymać się na każdej instrukcji podczas debugowania, użyj opcji Debuguj>Krok w głąb lub wybierz F11.

Debuger przechodzi przez instrukcje kodu, a nie wiersze fizyczne. Na przykład klauzula może być napisana if w jednym wierszu:

int x = 42;
string s = "Not answered";
if( int x == 42) s = "Answered!";

Jednak po wejściu do tego wiersza debuger traktuje warunek jako jeden krok i konsekwencję jako inny. W poprzednim przykładzie warunek ma wartość true.

W wywołaniu zagnieżdżonej funkcji Krok W przechodzi do najbardziej zagnieżdżonej funkcji. Jeśli na przykład użyjesz polecenia Step Into w wywołaniu, takim jak Func1(Func2()), debuger wchodzi do funkcji Func2.

Wskazówka

Podczas uruchamiania każdego wiersza kodu możesz umieścić kursor na zmiennych, aby wyświetlić ich wartości, lub użyć okien Locals and Watch , aby obserwować zmianę wartości. Możesz również wizualnie śledzić stos wywołań podczas przechodzenia do funkcji. (Tylko w przypadku programu Visual Studio Enterprise zobacz Mapuj metody w stosie wywołań podczas debugowania).

Przejdź przez kod i pomiń niektóre funkcje

Podczas debugowania możesz nie przejmować się funkcją. Możesz też wiedzieć, że kod działa, podobnie jak dobrze przetestowany kod biblioteki. Aby pominąć kod podczas wykonywania kroków kodu, możesz użyć następujących poleceń. Funkcje nadal działają, ale debuger pomija je.

Polecenie klawiatury Polecenie menu Debug (Debugowanie) Opis
F10 Krok po Jeśli bieżący wiersz zawiera wywołanie funkcji, funkcja Step Over uruchamia kod, a następnie zawiesza wykonywanie w pierwszym wierszu kodu po powrocie wywołanej funkcji.
Zmiana+F11 Wyjdź Krok Wychodzący kontynuuje uruchamianie kodu i zawiesza wykonywanie po powrocie bieżącej funkcji. Debuger pomija bieżącą funkcję.

Przejdź do określonej lokalizacji lub funkcji

Możesz woleć uruchomić bezpośrednio do określonej lokalizacji lub funkcji, gdy dokładnie wiesz, jaki kod chcesz sprawdzić lub jeśli wiesz, gdzie chcesz rozpocząć debugowanie.

  • Ustawienie punktu przerwania jest najlepsze, jeśli uważasz, że warto ponownie użyć punktu przerwania.
  • Inne metody są dla wygody i są podobne do ustawiania tymczasowego punktu przerwania.

Uruchamianie do punktu przerwania w kodzie

Aby ustawić prosty punkt przerwania w kodzie, wybierz lewy margines obok wiersza kodu, w którym chcesz wstrzymać wykonywanie. Możesz również wybrać wiersz, a następnie wybrać F9, wybrać Debug>Przełącz punkt przerwania, lub kliknąć prawym przyciskiem myszy i wybrać Punkt>przerwania Wstaw punkt przerwania. Punkt przerwania jest wyświetlany jako czerwona kropka na lewym marginesie obok wiersza kodu. Debugger zawiesza wykonanie tuż przed uruchomieniem linii.

Zrzut ekranu przedstawiający sposób ustawiania punktu przerwania.

Zrzut ekranu przedstawiający sposób ustawiania punktu przerwania.

Punkty przerwania w programie Visual Studio zapewniają bogaty zestaw funkcji, takich jak warunkowe punkty przerwania i punkty śledzenia. Aby uzyskać szczegółowe informacje, zobacz Używanie punktów przerwania.

Przejdź do punktu przerwania funkcji

Debuger można ustawić tak, aby działał, dopóki nie osiągnie określonej funkcji. Możesz określić funkcję według nazwy lub wybrać ją ze stosu wywołań.

Aby określić punkt przerwania funkcji według nazwy:

  1. Wybierz Debuguj>Nowy Punkt Przerwania>Punkt Przerwania Funkcji.

  2. W oknie dialogowym Nowy punkt przerwania funkcji wprowadź nazwę funkcji i wybierz jej język:

    Zrzut ekranu przedstawiający okno dialogowe Nowy punkt przerwania funkcji.

    Zrzut ekranu przedstawiający okno dialogowe Nowy punkt przerwania funkcji.

  3. Kliknij przycisk OK.

Jeśli funkcja jest przeciążona lub w więcej niż jednej przestrzeni nazw, możesz wybrać odpowiednią funkcję w oknie Punkty przerwania :

Zrzut ekranu przedstawiający okno punktów przerwania.

Zrzut ekranu przedstawiający okno punktów przerwania.

Aby wybrać punkt przerwania funkcji ze stosu wywołań:

  1. Podczas debugowania otwórz okno Stos wywołań, wybierając Debuguj>Windows>Stos wywołań.

  2. W oknie Stos wywołań kliknij prawym przyciskiem myszy funkcję i wybierz polecenie Uruchom do kursora lub naciśnij Ctrl+F10.

Aby uzyskać informacje na temat wizualnego śledzenia stosu wywołań, zobacz Mapowanie metod na stosie wywołań podczas debugowania.

Przejdź do lokalizacji kursora

Aby uruchomić polecenie do lokalizacji kursora, w kodzie źródłowym lub w oknie stosu wywołań wybierz wiersz, który chcesz przerwać, a następnie kliknij prawym przyciskiem myszy i wybierz polecenie Uruchom do kursora lub naciśnij Ctrl+F10. Wybranie opcji Uruchom do kursora jest równoznaczne z ustawieniem tymczasowego punktu przerwania.

Wymuszanie uruchomienia do lokalizacji kursora

Aby przejść do lokalizacji kursora, w kodzie źródłowym lub w oknie stosu wywołań, wybierz wiersz, przy którym chcesz się zatrzymać, a następnie kliknij prawym przyciskiem myszy i wybierz polecenie Wymuś przejście do kursora. Wybranie pozycji Wymuś uruchomienie kursora spowoduje pominięcie wszelkich punktów przerwania i wyjątków pierwszej szansy, dopóki debuger nie osiągnie wiersza kodu, w którym znajduje się kursor.

Biegnij, aby kliknąć

Podczas wstrzymania debugera możesz najechać na instrukcję w kodzie źródłowym lub w oknie Dezasemblacji i wybrać zieloną strzałkę Uruchom wykonanie do tego miejsca. Użycie funkcji Uruchom do kliknięcia jest podobne do ustawiania tymczasowego punktu przerwania.

Zrzut ekranu pokazujący funkcję Uruchom, aby Kliknąć oraz zieloną strzałkę.

Wymuś uruchomienie, aby kliknąć

Podczas wstrzymania debugera możesz przesunąć wskaźnik myszy nad instrukcją w kodzie źródłowym, trzymając klawisz Shift, a następnie wybrać opcję Wymuś wykonanie tutaj (podwójna zielona strzałka). Po wybraniu tej opcji aplikacja dołącza debuger programu Visual Studio i wstrzymuje się w lokalizacji kursora. Wszystkie punkty przerwania i wyjątki pierwszej szansy znalezione podczas wykonywania są tymczasowo wyłączone.

Zrzut ekranu przedstawiający wymuszanie uruchomienia do kliknięcia.

Uwaga / Notatka

Wymuszanie uruchomienia do kliknięcia jest dostępne począwszy od programu Visual Studio 2022.

Ręczne włamanie do kodu

Aby przejść do następnego dostępnego wiersza kodu w uruchomionej aplikacji, wybierz pozycję Debuguj>Przerwij Wszystko lub naciśnij Ctrl+Alt+Break.

Debugowanie kodu spoza użytkownika

Domyślnie debuger próbuje debugować tylko kod aplikacji, włączając ustawienie o nazwie Tylko mój kod. Aby uzyskać szczegółowe informacje o sposobie działania tej funkcji dla różnych typów projektów i języków oraz o tym, jak można ją dostosować, zobacz Just My Code (Tylko mój kod).

Aby przyjrzeć się kodowi struktury, kodowi biblioteki innej firmy lub wywołaniom systemowym podczas debugowania, możesz wyłączyć opcję Tylko mój kod. W obszarze Narzędzia (lub Debugowanie) >Opcje>debugowania wyczyść pole wyboru Włącz tylko mój kod . Gdy funkcja Tylko mój kod jest wyłączona, kod spoza użytkownika pojawia się w oknach debugera, a debuger może zagłębić się w kod spoza użytkownika.

Uwaga / Notatka

Just My Code nie jest obsługiwane dla projektów dla urządzeń.

Debugowanie kodu systemu

Jeśli załadowano symbole debugowania dla kodu systemowego firmy Microsoft i wyłączono opcję Just My Code, możesz przejść do wywołania systemu tak samo jak dowolne inne wywołanie.

Począwszy od programu Visual Studio 2022 w wersji 17.7, można automatycznie kompilować kod .NET podczas przechodzenia do kodu zewnętrznego bez konieczności ręcznego ładowania symboli debugowania. Aby uzyskać więcej informacji, zobacz Generowanie kodu źródłowego na podstawie zestawów platformy .NET podczas debugowania.

Aby dowiedzieć się więcej o ładowaniu symboli firmy Microsoft, zobacz Konfigurowanie lokalizacji plików symboli i opcji ładowania.

Aby załadować symbole dla określonego składnika systemu:

  1. Podczas debugowania otwórz okno Moduły, wybierając pozycję Debuguj>moduły> lub naciskając Ctrl+Alt+U.

  2. W oknie Moduły można określić, które moduły mają symbole załadowane w kolumnie Stan symboli . Kliknij prawym przyciskiem myszy moduł, dla którego chcesz załadować symbole, a następnie wybierz pozycję Załaduj symbole.

Przechodzenie do właściwości i operatorów w kodzie zarządzanym

Domyślnie, debuger przeskakuje nad właściwościami i operatorami w kodzie zarządzanym. W większości przypadków to zachowanie zapewnia lepsze środowisko debugowania. Aby włączyć przechodzenie do właściwości lub operatorów, wybierz Debug>Opcje. Na stronie Debugging>Ogólne usuń zaznaczenie pola wyboru Przechodź nad właściwościami i operatorami (tylko zarządzane).

Przenieś wskaźnik, aby zmienić przepływ wykonywania

Możesz zmienić kolejną instrukcję, która zostanie uruchomiona, przenosząc żółty wskaźnik wykonywania. Tej funkcji można używać w trybie przerwania.

Jest to zaawansowana funkcja debugera. Aby uzyskać więcej informacji, zobacz Przenoszenie wskaźnika wykonywania.