użyj punktów przerwania w Debuggerze Visual Studio
- 06/30/2020
- 12 protokół do czytania
-
- M
- g
- j
- v
- g
-
+8
punkty przerwania są jedną z najważniejszych technik debugowania w zestawie narzędzi programisty. Ustawiasz punkty przerwania wszędzie tam, gdzie chcesz wstrzymać wykonywanie debuggera. Na przykład, możesz chcieć zobaczyć stan zmiennych kodu lub spojrzeć na stos wywołań w określonym punkcie przerwania. Jeśli próbujesz rozwiązać ostrzeżenie lub problem podczas używania punktów przerwania, zobacz Rozwiązywanie problemów z punktami przerwania w debuggerze Visual Studio.
Uwaga
jeśli znasz zadanie lub problem, który próbujesz rozwiązać, ale musisz wiedzieć, jakiego rodzaju punktu przerwania użyć, zobacz FAQ – Znajdź swoją funkcję debugowania.
- Ustaw punkty przerwania w kodzie źródłowym
- akcje Breakpoint i tracepoints
- Warunki punktu przerwania
- Utwórz wyrażenie warunkowe
- używaj identyfikatorów obiektów w wyrażeniach warunkowych (tylko C# i f#)
- Ustaw warunek liczby trafień
- Ustaw stan filtra
- Ustaw punkty przerwania funkcji
- Ustawianie punktu przerwania funkcji za pomocą adresu pamięci (tylko natywny C++)
- ustawianie punktów przerwania danych (. NET Core 3.0 lub wyższy)
- ustawianie punktów przerwania danych (tylko natywny C++)
- zarządzanie punktami przerwania w oknie punkty przerwania
- etykiety punktów przerwania
- Eksportuj i importuj punkty przerwania
- Ustaw punkty przerwania z okien debuggera
- Ustaw punkt przerwania w oknie stosu wywołań
- Ustaw punkt przerwania w oknie demontażu
- Zobacz też
Ustaw punkty przerwania w kodzie źródłowym
możesz ustawić punkt przerwania w dowolnej linii kodu wykonywalnego. Na przykład w poniższym kodzie C# można ustawić punkt przerwania w wierszu kodu z przypisaniem zmiennej (int testInt = 1
), pętlą for
lub dowolnym kodem wewnątrz pętli for
. Nie można ustawić punktu przerwania dla podpisów metod, deklaracji dla przestrzeni nazw lub klasy ani deklaracji zmiennych, jeśli nie ma przypisania ani getter/setter.
aby ustawić punkt przerwania w kodzie źródłowym, kliknij lewy margines obok wiersza kodu. Możesz także wybrać linię I nacisnąć klawisz F9, wybrać opcję Debug > Toggle Breakpoint lub kliknąć prawym przyciskiem myszy i wybrać Breakpoint > Insert breakpoint. Punkt przerwania pojawia się jako czerwona kropka na lewym marginesie.
dla większości języków, w tym C#, breakpoint i linie bieżącego wykonania są automatycznie podświetlane. W przypadku kodu C++ możesz włączyć podświetlanie punktów przerwania i bieżących linii, wybierając Narzędzia (lub debugowanie) > opcje > debugowanie > Podświetl całą linię źródłową dla punktów przerwania i bieżącej instrukcji (tylko w C++).
podczas debugowania wykonywanie zatrzymuje się w punkcie przerwania, zanim zostanie wykonany kod w tej linii. Symbol punktu przerwania pokazuje żółtą strzałkę.
w punkcie przerwania w poniższym przykładzie wartość testInt
nadal wynosi 1. Tak więc wartość nie zmieniła się od zainicjalizowania zmiennej (ustawiona na wartość 1), ponieważ instrukcja w Kolorze Żółtym nie została jeszcze wykonana.
gdy debugger zatrzymuje się w punkcie przerwania, możesz sprawdzić aktualny stan aplikacji, w tym wartości zmiennych i stos wywołań.
oto kilka ogólnych instrukcji dotyczących pracy z punktami przerwania.
-
punkt przerwania to przełącznik. Możesz go kliknąć, nacisnąć klawisz F9 lub użyć opcji Debug > Toggle Breakpoint, aby go usunąć lub Ponownie włożyć.
-
aby wyłączyć punkt przerwania bez jego usuwania, najedź kursorem na niego lub kliknij go prawym przyciskiem myszy i wybierz pozycję Wyłącz punkt przerwania. Wyłączone punkty przerwania są wyświetlane jako puste kropki w lewym marginesie lub w oknie punkty przerwania. Aby ponownie włączyć punkt przerwania, najedź na niego kursorem lub kliknij go prawym przyciskiem myszy i wybierz opcję Włącz punkt przerwania.
-
Ustaw warunki i działania, dodawaj i edytuj etykiety lub Eksportuj punkt przerwania, klikając go prawym przyciskiem myszy i wybierając odpowiednie polecenie lub najeżdżając kursorem myszy na niego i wybierając ikonę ustawień.
akcje Breakpoint i tracepoints
tracepoint jest punktem przerwania, który wypisuje wiadomość do okna wyjściowego. Tracepoint może działać jak tymczasowe polecenie trace w języku programowania i nie wstrzymuje wykonywania kodu. Program tracepoint można utworzyć, ustawiając specjalną akcję w oknie Ustawienia punktu przerwania. Aby uzyskać szczegółowe instrukcje, zobacz Używanie tracepoints w debuggerze Visual Studio.
Warunki punktu przerwania
możesz kontrolować, kiedy i gdzie punkt przerwania jest wykonywany, ustawiając warunki. Warunkiem może być dowolne poprawne wyrażenie, które debugger rozpozna. Aby uzyskać więcej informacji na temat prawidłowych wyrażeń, zobacz wyrażenia w debuggerze.
aby ustawić warunek punktu przerwania:
-
kliknij prawym przyciskiem myszy symbol punktu przerwania i wybierz Warunki (lub naciśnij Alt + F9, C). Lub najedź kursorem na symbol punktu przerwania, wybierz ikonę Ustawienia, a następnie wybierz warunki w oknie Ustawienia punktu przerwania.
możesz również ustawić warunki w oknie punkty przerwania, klikając prawym przyciskiem myszy punkt przerwania i wybierając Ustawienia, a następnie wybierając Warunki.
-
z listy rozwijanej wybierz wyrażenie warunkowe, liczbę trafień lub filtr i odpowiednio ustaw wartość.
-
wybierz Zamknij lub naciśnij Ctrl + Enter, aby zamknąć okno ustawień punktu przerwania. Lub w oknie punkty przerwania wybierz OK, aby zamknąć okno dialogowe.
punkty przerwania z ustawionymi warunkami są wyświetlane z symbolem + w oknach kodu źródłowego i punktów przerwania.
Utwórz wyrażenie warunkowe
po wybraniu wyrażenia warunkowego możesz wybrać jeden z dwóch warunków: jest prawdą lub po zmianie. Wybierz wartość true, aby przerwać, gdy wyrażenie jest spełnione, lub po zmianie NA break, gdy wartość wyrażenia się zmieniła.
w poniższym przykładzie wartość breakpoint jest osiągana tylko wtedy, gdy wartość testInt
wynosi 4:
w poniższym przykładzie wartość punktu przerwania jest osiągana tylko wtedy, gdy zmienia się wartość testInt
:
jeśli ustawisz warunek punktu przerwania z nieprawidłową składnią, pojawi się komunikat ostrzegawczy. Jeśli określisz warunek punktu przerwania z prawidłową składnią, ale nieprawidłową semantyką, pojawi się komunikat ostrzegawczy przy pierwszym trafieniu punktu przerwania. W obu przypadkach debugger ulega awarii, gdy trafi w nieprawidłowy punkt przerwania. Punkt przerwania jest pomijany tylko wtedy, gdy warunek jest poprawny i ma wartość false
.
Uwaga
dla pola po zmianie debuger nie uważa pierwszej oceny warunku za zmianę, więc nie osiąga punktu przerwania przy pierwszej ocenie.
używaj identyfikatorów obiektów w wyrażeniach warunkowych (tylko C# i f#)
czasami chcesz obserwować zachowanie określonego obiektu. Na przykład możesz chcieć dowiedzieć się, dlaczego obiekt został wstawiony do kolekcji więcej niż jeden raz. W językach C# i F# można tworzyć identyfikatory obiektów dla określonych instancji typów referencyjnych i używać ich w Warunkach punktu przerwania. ID obiektu jest generowane przez usługi debugowania Runtime języka common language (CLR) i powiązane z obiektem.
aby utworzyć ID obiektu:
-
Ustaw punkt przerwania w kodzie w pewnym miejscu po utworzeniu obiektu.
-
Rozpocznij debugowanie, a gdy wykonanie zostanie wstrzymane w punkcie przerwania, wybierz opcję Debuguj > Windows > Locals (lub naciśnij Ctrl + Alt + V, L), aby otworzyć okno Locals.
Znajdź konkretną instancję obiektu w oknie Locals, kliknij ją prawym przyciskiem myszy i wybierz Ustaw identyfikator obiektu.
powinieneś zobaczyć $ plus liczbę w oknie lokalnym. Jest to ID obiektu.
-
Dodaj nowy punkt przerwania w punkcie, który chcesz zbadać; na przykład, gdy obiekt ma zostać dodany do kolekcji. Kliknij prawym przyciskiem myszy punkt przerwania i wybierz Warunki.
-
użyj ID obiektu w polu wyrażenie warunkowe. Na przykład, jeżeli zmienna
item
jest obiektem do dodania do kolekcji, select ma wartość true i wpisz item == $< n>, gdzie < n> jest numerem ID obiektu.wykonanie zostanie przerwane w momencie dodania tego obiektu do kolekcji.
aby usunąć ID obiektu, kliknij prawym przyciskiem myszy zmienną w oknie Locals i wybierz Usuń ID obiektu.
Uwaga
identyfikatory obiektów tworzą słabe referencje i nie zapobiegają zbieraniu śmieci obiektu. Są one ważne tylko dla bieżącej sesji debugowania.
Ustaw warunek liczby trafień
jeśli podejrzewasz, że pętla w kodzie zaczyna się źle zachowywać po określonej liczbie iteracji, możesz ustawić punkt przerwania, aby zatrzymać wykonywanie po tej liczbie trafień, zamiast wielokrotnego naciskania F5, aby osiągnąć tę iterację.
w obszarze warunki w oknie Ustawienia punktu przerwania Wybierz liczbę trafień, a następnie określ liczbę iteracji. W poniższym przykładzie, punkt przerwania jest ustawiony na trafienie w każdej innej iteracji:
Ustaw stan filtra
możesz ograniczyć punkt przerwania do uruchamiania tylko na określonych urządzeniach lub w określonych procesach i wątkach.
w obszarze warunki w oknie Ustawienia punktu przerwania wybierz opcję Filtr, a następnie wprowadź jedno lub więcej z następujących wyrażeń:
- MachineName = “name”
- ProcessId = value
- ProcessName = “name”
- ThreadId = value
- ThreadName = “name”
Dołącz wartości ciągu znaków w podwójnych cudzysłowach. Możesz łączyć klauzule używając &
(AND), ||
(OR), !
(NOT) i nawiasów.
Ustaw punkty przerwania funkcji
możesz przerwać wykonywanie funkcji, gdy zostanie wywołana funkcja. Jest to przydatne, na przykład, gdy znasz nazwę funkcji, ale nie jej lokalizację. Jest to również przydatne, jeśli masz funkcje o tej samej nazwie i chcesz złamać je wszystkie (takie jak przeciążone funkcje lub funkcje w różnych projektach).
aby ustawić punkt przerwania funkcji:
-
Wybierz Debug > nowy punkt przerwania > funkcja punkt przerwania lub naciśnij Ctrl + K, B.
w oknie punkty przerwania można również wybrać nową funkcję >.
-
w oknie dialogowym Nowa funkcja punkt przerwania wprowadź nazwę funkcji w polu Nazwa funkcji.
aby zawęzić specyfikację funkcji:
-
Użyj w pełni kwalifikowanej nazwy funkcji.
przykład:
Namespace1.ClassX.MethodA()
-
dodaj typy parametrów przeciążonej funkcji.
przykład:
MethodA(int, string)
-
użyj!’symbol określający moduł.
przykład:
App1.dll!MethodA
-
użyj operatora kontekstu w natywnym C++.
{function, , }
przykład:
{MethodA, , App1.dll}+2
-
-
z listy rozwijanej Język wybierz język funkcji.
-
wybierz OK.
Ustawianie punktu przerwania funkcji za pomocą adresu pamięci (tylko natywny C++)
możesz użyć adresu obiektu, aby ustawić punkt przerwania funkcji na metodzie wywoływanej przez konkretną instancję klasy. Na przykład, mając adresowalny obiekt typu my_class
, można ustawić punkt przerwania funkcji dla metody my_method
wywołanej przez instancję.
-
ustawia punkt przerwania gdzieś po utworzeniu instancji klasy.
-
Znajdź adres instancji (na przykład
0xcccccccc
). -
Wybierz Debug > nowy punkt przerwania > funkcja punkt przerwania lub naciśnij Ctrl + K, B.
-
dodaj następujące elementy do pola Nazwa funkcji i wybierz język C++.
((my_class *) 0xcccccccc)->my_method
ustawianie punktów przerwania danych (. NET Core 3.0 lub wyższy)
punkty przerwania danych przerywają wykonywanie, gdy zmienia się właściwość konkretnego obiektu.
aby ustawić punkt przerwania danych
-
w projekcie. NET Core Rozpocznij debugowanie i poczekaj na osiągnięcie punktu przerwania.
-
w oknie Autos, Watch lub Locals kliknij właściwość prawym przyciskiem myszy i wybierz Break, gdy wartość zmieni się w menu kontekstowym.
punkty przerwania danych w. NET Core nie będą działać dla:
- właściwości, które nie są rozszerzalne w oknie tooltip, Locals, Autos lub Watch
- zmienne statyczne
- klasy z atrybutem DebuggerTypeProxy
- pola wewnątrz struktur
ustawianie punktów przerwania danych (tylko natywny C++)
punkty przerwania danych przerywają wykonywanie, gdy zmienia się wartość przechowywana pod określonym adresem pamięci. Jeśli wartość jest odczytywana, ale nie zmieniana, wykonanie nie zostanie przerwane.
aby ustawić punkt przerwania danych:
-
w projekcie c++ Rozpocznij debugowanie i poczekaj na osiągnięcie punktu przerwania. W menu debugowania wybierz nowy punkt przerwania > Data Breakpoint.
Możesz również wybrać nowy punkt przerwania danych > w oknie punkty przerwania lub kliknąć prawym przyciskiem myszy element w oknie Autos, Watch lub Locals i wybrać pozycję Przerwij, gdy wartość zmieni się w menu kontekstowym.
-
w polu Adres wpisz adres pamięci lub wyrażenie obliczające adres pamięci. Na przykład wpisz
&avar
, aby przerwać, gdy zmieni się zawartość zmiennejavar
. -
z listy rozwijanej Liczba bajtów Wybierz liczbę bajtów, które debugger ma oglądać. Na przykład, jeśli wybierzesz 4, debugger będzie obserwował cztery bajty zaczynające się od
&avar
i przerywa, jeśli którykolwiek z tych bajtów zmieni wartość.
punkty przerwania danych nie działają w następujących warunkach:
- proces, który nie jest debugowany, zapisuje do lokalizacji pamięci.
- lokalizacja pamięci jest współdzielona między dwoma lub więcej procesami.
- lokalizacja pamięci jest aktualizowana w jądrze. Na przykład, jeśli pamięć jest przekazywana do 32-bitowej funkcji Windows
ReadFile
, pamięć zostanie zaktualizowana z trybu jądra, więc debugger nie zepsuje się podczas aktualizacji. - gdzie wyrażenie zegarka jest większe niż 4 bajty na sprzęcie 32-bitowym i 8 bajtów na sprzęcie 64-bitowym. Jest to ograniczenie architektury x86.
Uwaga
-
punkty przerwania danych zależą od konkretnych adresów pamięci. Adres zmiennej zmienia się z jednej sesji debugowania do następnej, więc punkty przerwania danych są automatycznie wyłączane na końcu każdej sesji debugowania.
-
Jeśli ustawisz punkt przerwania danych na zmiennej lokalnej, punkt przerwania pozostaje włączony po zakończeniu funkcji, ale adres pamięci nie ma już zastosowania, więc zachowanie punktu przerwania jest nieprzewidywalne. Jeśli ustawisz punkt przerwania danych na zmiennej lokalnej, powinieneś usunąć lub wyłączyć punkt przerwania przed zakończeniem funkcji.
zarządzanie punktami przerwania w oknie punkty przerwania
możesz użyć okna punkty przerwania, aby wyświetlić i zarządzać wszystkimi punktami przerwania w rozwiązaniu. Ta scentralizowana lokalizacja jest szczególnie przydatna w przypadku dużych rozwiązań lub złożonych scenariuszy debugowania, w których punkty przerwania są krytyczne.
w oknie punkty przerwania możesz wyszukiwać, sortować, filtrować, włączać/wyłączać lub usuwać punkty przerwania. Można również ustawić warunki i działania, dodać nową funkcję lub punkt przerwania danych.
aby otworzyć okno punkty przerwania, wybierz Debug > Windows > punkty przerwania lub naciśnij Ctrl+Alt+B.
aby wybrać kolumny do wyświetlenia w oknie punkty przerwania, wybierz Pokaż kolumny. Wybierz nagłówek kolumny, aby posortować listę punktów przerwania według tej kolumny.
etykiety punktów przerwania
możesz użyć etykiet do sortowania i filtrowania listy punktów przerwania w oknie punkty przerwania.
- aby dodać etykietę do punktu przerwania, kliknij go prawym przyciskiem myszy w oknie kod źródłowy lub punkty przerwania, a następnie wybierz opcję Edytuj etykiety. Dodaj nową etykietę lub wybierz istniejącą, a następnie wybierz OK.
- posortuj listę punktów przerwania w oknie punkty przerwania, wybierając etykiety, warunki lub inne nagłówki kolumn. Kolumny do wyświetlenia można wybrać, wybierając opcję Pokaż kolumny na pasku narzędzi.
Eksportuj i importuj punkty przerwania
aby zapisać lub udostępnić stan i lokalizację punktów przerwania, możesz je wyeksportować lub zaimportować.
- aby wyeksportować pojedynczy punkt przerwania do pliku XML, kliknij go prawym przyciskiem myszy w oknie kod źródłowy lub punkty przerwania i wybierz Eksportuj lub Eksportuj wybrane. Wybierz lokalizację eksportu, a następnie Wybierz Zapisz. Domyślną lokalizacją jest folder rozwiązania.
- aby wyeksportować kilka punktów przerwania, w oknie punkty przerwania Wybierz pola obok punktów przerwania lub wprowadź kryteria wyszukiwania w polu wyszukiwania. Wybierz ikonę Eksportuj wszystkie punkty przerwania odpowiadające bieżącym kryteriom wyszukiwania i zapisz plik.
- aby wyeksportować wszystkie punkty przerwania, usuń zaznaczenie wszystkich pól i pozostaw pole wyszukiwania puste. Wybierz ikonę Eksportuj wszystkie punkty przerwania odpowiadające bieżącym kryteriom wyszukiwania i zapisz plik.
- aby zaimportować punkty przerwania, w oknie punkty przerwania wybierz ikonę Importuj punkty przerwania z pliku, przejdź do lokalizacji pliku XML i wybierz Otwórz.
Ustaw punkty przerwania z okien debuggera
możesz także ustawić punkty przerwania ze stosu wywołań i zdemontować okna debuggera.
Ustaw punkt przerwania w oknie stosu wywołań
aby złamać polecenie lub wiersz, do którego zwraca funkcja wywołująca, możesz ustawić punkt przerwania w oknie stosu wywołań.
aby ustawić punkt przerwania w oknie stosu wywołań:
-
aby otworzyć okno stosu połączeń, musisz zostać wstrzymany podczas debugowania. Wybierz Debug > Windows > wywołanie stosu lub naciśnij Ctrl+Alt+C.
-
w oknie stosu połączeń kliknij prawym przyciskiem myszy funkcję wywołania i wybierz punkt przerwania > Wstaw punkt przerwania lub naciśnij klawisz F9.
symbol punktu przerwania pojawia się obok nazwy wywołania funkcji w lewym marginesie stosu wywołań.
punkt przerwania stosu wywołań pojawia się w oknie punkty przerwania jako adres, z lokalizacją pamięci, która odpowiada następnej instrukcji wykonywalnej w funkcji.
debugger łamie się zgodnie z instrukcją.
aby uzyskać więcej informacji na temat stosu połączeń, zobacz Jak: używać okna stosu połączeń.
aby wizualnie śledzić punkty przerwania podczas wykonywania kodu, zobacz metody mapowania stosu wywołań podczas debugowania.
Ustaw punkt przerwania w oknie demontażu
-
aby otworzyć okno demontażu, musisz zostać wstrzymany podczas debugowania. Wybierz Debug > Windows > demontaż lub naciśnij Ctrl + Alt + D.
-
w oknie demontaż kliknij na lewym marginesie instrukcji, przy której chcesz ją złamać. Można go również zaznaczyć i nacisnąć klawisz F9 lub kliknąć prawym przyciskiem myszy i wybrać punkt przerwania > Wstaw punkt przerwania.
Zobacz też
- co to jest debugowanie?
- napisz lepszy kod C # za pomocą Visual Studio
- pierwsze spojrzenie na debugowanie
- Rozwiązywanie problemów z punktami przerwania w debuggerze Visual Studio