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
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 nawigacji uruchamiają aplikację i automatycznie dołączają debuger. 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 przejść przez kod. Istnieją dwa bardzo typowe sposoby szybkiego wprowadzania trybu przerwania:
Ustaw punkt przerwania i uruchom aplikację.
Uruchom polecenie w 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.
Polecenia kroku kodu mogą służyć do uruchamiania aplikacji, ale są częściej używane po wprowadzeniu trybu przerwania.
Nawigowanie po kodzie w trybie przerwania
Niektóre polecenia nawigacji są najczęściej używane w trybie przerwania (czyli podczas wstrzymania w debugerze).
Polecenia krokowania kodu są najczęściej używane w trybie przerwania.
Niektóre polecenia, takie jak Uruchom, aby kliknąć , mogą być używane tylko w trybie przerwania.
Tryb debugowania i przerwania
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
Jeśli podzielisz się na kod, który nie ma załadowanych plików źródłowych lub symboli (.pdb), debuger wyświetli 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 Określanie symboli (.pdb) i plików źródłowych. 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
Krok kodu odnosi się do wykonywania kodu aplikacji po jednej instrukcji naraz z dołączonym debugerem. Polecenia kroku debugera ułatwiają obserwowanie efektów każdej instrukcji i dowiedz się więcej o przepływie wykonywania.
Przechodzenie do kodu
Aby zatrzymać się na każdej instrukcji podczas debugowania, użyj pozycji Debuguj>krok do lub wybierz F11.
Debuger przechodzi przez instrukcje kodu, a nie wiersze fizyczne. Na przykład klauzula może być napisana if
w jednym wierszu:
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 przejdź do kroków do najbardziej głęboko zagnieżdżonej funkcji. Jeśli na przykład użyjesz polecenia Step Into w wywołaniu, na przykład Func1(Func2())
, debuger wykona kroki w funkcji Func2
.
Napiwek
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 Mapowanie metod na stosie wywołań podczas debugowania.
Przechodzenie przez kod i pomijanie niektórych funkcji
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 | Przechodzenie do kroku | 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. |
Shift+F11 | Wyjście | Krok Wychodzący kontynuuje uruchamianie kodu i zawiesza wykonywanie po powrocie bieżącej funkcji. Debuger pomija bieżącą funkcję. |
Uruchamianie do określonej lokalizacji lub funkcji
Możesz wolisz uruchomić bezpośrednio do określonej lokalizacji lub funkcji, gdy wiesz dokładnie, 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ć polecenie Debuguj>przełącz punkt przerwania lub kliknąć prawym przyciskiem myszy i wybrać pozycję Punkt przerwania Wstaw punkt> przerwania. Punkt przerwania jest wyświetlany jako czerwona kropka na lewym marginesie obok wiersza kodu. Debuger zawiesza wykonywanie tuż przed uruchomieniem wiersza.
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.
Uruchamianie 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:
Wybierz pozycję Debuguj>nowy punkt przerwania funkcji punktu>przerwania.
W oknie dialogowym Nowy punkt przerwania funkcji wprowadź nazwę funkcji i wybierz jej język:
Wybierz 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:
Aby wybrać punkt przerwania funkcji ze stosu wywołań:
Podczas debugowania otwórz okno Stos wywołań, wybierając pozycję Debuguj>stos wywołań systemu Windows.>
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.
Uruchamianie 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 pozycji Uruchom do kursora jest podobne do ustawienia tymczasowego punktu przerwania.
Wymuszanie uruchomienia 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 Wymuś uruchomienie 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.
Uruchom, aby kliknąć
Podczas wstrzymania debugera możesz umieścić wskaźnik myszy na instrukcji w kodzie źródłowym lub w oknie Dezasemblacji i wybrać opcję Uruchom wykonanie, aby znaleźć zieloną strzałkę. Używanie polecenia Uruchom do kliknięcia jest podobne do ustawiania tymczasowego punktu przerwania.
Uwaga
Polecenie Run to Click jest dostępne od programu Visual Studio 2017.
Wymuś uruchomienie, aby kliknąć
Podczas wstrzymania debugera możesz umieścić wskaźnik myszy na instrukcji w kodzie źródłowym, naciskając Shift , a następnie wybrać pozycję Wymuś uruchomienie wykonania w tym miejscu (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.
Uwaga
Wymuszanie uruchomienia do kliknięcia jest dostępne począwszy od programu Visual Studio 2022.
Ręczne podzielenie kodu
Aby podzielić się na następny dostępny wiersz kodu w uruchomionej aplikacji, wybierz pozycję Debuguj>wszystkie lub naciśnij Ctrl+Alt+Break.
Debugowanie kodu innego niż użytkownik
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 pozycja Tylko mój kod jest wyłączona, kod nieużytkownika jest wyświetlany w oknach debugera, a debuger może przejść do kodu innego niż użytkownik.
Uwaga
Tylko mój kod nie jest obsługiwany w przypadku projektów 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:
Podczas debugowania otwórz okno Moduły, wybierając pozycję Debuguj>moduły systemu Windows>lub naciskając Ctrl+Alt+U.
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
Debuger kroki dotyczące właściwości i operatorów w kodzie zarządzanym domyślnie. 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 pozycję Opcje debugowania>. Na stronie Ogólne debugowania>wyczyść pole wyboru Przekrocznij właściwości i operatory (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.