Rozwiązywanie problemów z punktami przerwania w debugerze programu Visual Studio
Dotyczy: Visual Studio
Ostrzeżenia dotyczące punktu przerwania
Podczas debugowania punkt przerwania ma dwa możliwe stany wizualne:
- Czerwone kółko, jeśli debuger pomyślnie ustawi punkt przerwania w procesie docelowym.
- Puste kółko (ciemnoszary lub biały wypełniony, w zależności od motywu), jeśli punkt przerwania jest wyłączony lub podczas próby ustawienia punktu przerwania występuje ostrzeżenie.
Aby określić różnicę, umieść wskaźnik myszy na punkcie przerwania i sprawdź, czy istnieje ostrzeżenie. W poniższych dwóch sekcjach opisano widoczne ostrzeżenia i sposób ich naprawiania.
"Nie załadowano symboli dla tego dokumentu"
Przejdź do pozycji Debuguj>moduły systemu Windows>podczas debugowania i sprawdź, czy moduł został załadowany.
- Jeśli moduł zostanie załadowany, sprawdź kolumnę Stan symboli, aby sprawdzić, czy symbole zostały załadowane.
Jeśli symbole nie są ładowane, sprawdź stan symboli, aby zdiagnozować problem:
W oknie Moduły kliknij prawym przyciskiem myszy moduł, dla którego symbole nie zostały załadowane, i wybierz pozycję Informacje o ładowaniu symboli....
Aby uzyskać więcej informacji na temat ładowania symboli, zobacz Określanie symboli (pdb) i Plików źródłowych.
Jeśli symbole są ładowane, plik PDB nie zawiera informacji o plikach źródłowych. Oto kilka możliwych przyczyn:
- Jeśli pliki źródłowe zostały ostatnio dodane, upewnij się, że jest ładowana aktualna wersja modułu.
- Istnieje możliwość utworzenia pozbawionych plików PDB za pomocą opcji konsolidatora /PDBSTRIPPED . Usunięte pliki PDB nie zawierają informacji o pliku źródłowym. Upewnij się, że pracujesz z pełnym plikiem PDB, a nie z rozbieranym plikiem PDB.
- Plik PDB jest częściowo uszkodzony. Usuń plik i uruchom czystą kompilację modułu, aby spróbować rozwiązać ten problem.
- Jeśli moduł nie został załadowany, sprawdź następujące kwestie, aby znaleźć przyczynę:
- Upewnij się, że debugujesz właściwy proces.
- Sprawdź, czy debugujesz odpowiedni kod. Możesz dowiedzieć się, jakiego typu kod jest skonfigurowany do debugowania w oknie Procesy (Debugowanie>procesów systemu Windows).> Jeśli na przykład próbujesz debugować kod języka C#, upewnij się, że debuger jest skonfigurowany pod kątem odpowiedniego typu i wersji platformy .NET (na przykład Managed (v4*) a Managed (v2*/v3*) a Managed (CoreCLR)).
"… bieżący kod źródłowy różni się od wersji wbudowanej w..."
Jeśli plik źródłowy uległ zmianie, a źródło nie jest już zgodne z debugowaniem kodu, debuger nie ustawi punktów przerwania w kodzie domyślnie. Zwykle ten problem występuje, gdy plik źródłowy zostanie zmieniony, ale kod źródłowy nie został ponownie skompilowany. Aby rozwiązać ten problem, skompiluj projekt. Jeśli system kompilacji uważa, że projekt jest już aktualny, mimo że nie jest, możesz wymusić ponowne skompilowanie systemu projektu. Ponownie skompiluj projekt, zapisując plik źródłowy lub czyszcząc dane wyjściowe kompilacji przed utworzeniem.
W rzadkich scenariuszach możesz chcieć debugować bez dopasowywania kodu źródłowego. Debugowanie bez dopasowywania kodu źródłowego może prowadzić do mylącego środowiska debugowania, dlatego upewnij się, jak chcesz kontynuować.
Wykonaj jedną z opcji, aby wyłączyć te kontrole bezpieczeństwa:
- Aby zmodyfikować pojedynczy punkt przerwania, umieść kursor nad ikoną punktu przerwania w edytorze i wybierz ikonę ustawień (koła zębatego). Do edytora zostanie dodane okno podglądu. W górnej części okna podglądu znajduje się hiperlink wskazujący lokalizację punktu przerwania. Wybierz hiperlink, aby zezwolić na modyfikację lokalizacji punktu przerwania i zaznacz pole Wyboru Zezwalaj na różnice kodu źródłowego od oryginalnego.
- Aby zmodyfikować to ustawienie dla wszystkich punktów przerwania, przejdź do pozycji Opcje i ustawienia debugowania>. Na stronie Debugowanie/Ogólne wyczyść opcję Wymagaj plików źródłowych, które są dokładnie zgodne z oryginalną wersją. Pamiętaj, aby ponownie włączyć tę opcję po zakończeniu debugowania.
Punkt przerwania został pomyślnie ustawiony (bez ostrzeżenia), ale nie został osiągnięty
Ta sekcja zawiera informacje dotyczące rozwiązywania problemów, gdy debuger nie wyświetla żadnych ostrzeżeń — punkt przerwania jest stałym czerwonym okręgiem podczas aktywnego debugowania, ale punkt przerwania nie jest osiągany.
Oto kilka rzeczy do sprawdzenia:
- Jeśli kod jest uruchamiany w więcej niż jednym procesie lub więcej niż jednym komputerze, upewnij się, że debugujesz odpowiedni proces lub komputer.
- Upewnij się, że kod jest uruchomiony. Aby przetestować, czy kod jest uruchomiony, dodaj wywołanie do
System.Diagnostics.Debugger.Break
(C#/VB) lub__debugbreak
(C++) do wiersza kodu, w którym próbujesz ustawić punkt przerwania, a następnie ponownie skompiluj projekt. - Jeśli debugujesz zoptymalizowany kod, upewnij się, że funkcja, w której ustawiono punkt przerwania, nie jest wstawiona do innej funkcji. Test
Debugger.Break
opisany w poprzednim teście może również pracować nad przetestowaniem tego problemu. - Aby dołączyć do scenariuszy przetwarzania , upewnij się, że debugujesz właściwy typ kodu (na przykład kod skryptu a program .NET Framework i .NET 5+). Aby zbadać, zaznacz opcję Dołącz do w oknie dialogowym Dołączanie do procesu, a następnie wybierz pozycję Wybierz, jeśli to konieczne, aby zmienić typ kodu.
Usunięto punkt przerwania, ale nadal go osiągam po ponownym uruchomieniu debugowania
Jeśli punkt przerwania został usunięty podczas debugowania, punkt przerwania może zostać ponownie osiągnięty przy następnym rozpoczęciu debugowania. Aby zatrzymać trafienie do tego punktu przerwania, upewnij się, że wszystkie wystąpienia punktu przerwania zostały usunięte z okna Punkty przerwania.