Rozwiązywanie problemów z punktami przerwania w debugerze programu Visual Studio

Dotyczy: Visual Studio

Ostrzeżenia punktu przerwania

Podczas debugowania punkt przerwania ma dwa możliwe stany wizualizacji:

  • Stałe czerwone kółko, jeśli debuger pomyślnie ustawi punkt przerwania w procesie docelowym.
  • Pusty (wypełniony na biało) okrąg, punkt przerwania jest wyłączony lub wystąpiło ostrzeżenie podczas próby ustawienia punktu przerwania.

Aby określić różnicę, umieść kursor nad punktem przerwania i sprawdź, czy istnieje ostrzeżenie. W poniższych dwóch sekcjach opisano ważne ostrzeżenia i sposób ich naprawiania.

"Nie załadowano symboli dla tego dokumentu"

Przejdź do okna Moduły (Debugowanie>modułówsystemu Windows>) podczas debugowania i sprawdź, czy moduł jest załadowany.

  • Jeśli moduł został załadowany, sprawdź kolumnę Stan symbolu , aby sprawdzić, czy symbole zostały załadowane.
    • Jeśli symbole nie są ładowane, sprawdź stan symbolu, aby zdiagnozować problem. W menu kontekstowym modułu w oknie Moduły wybierz pozycję Informacje o ładowaniu symboli... aby zobaczyć, gdzie debuger wyglądał, aby spróbować załadować symbole. Aby uzyskać więcej informacji na temat ładowania symboli, zobacz Określanie symbolu (pdb) i plików źródłowych.
    • W przypadku załadowania symboli baza danych 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 usuniętych baz danych PDB przy użyciu opcji /PDBSTRIPPED konsolidatora. Usunięte pliki PDB nie zawierają informacji o pliku źródłowym. Upewnij się, że pracujesz z pełną bazą danych PDB, a nie z usuniętą bazą danych PDB.
      • Plik PDB jest częściowo uszkodzony. Usuń plik i uruchom czystą kompilację modułu, aby spróbować rozwiązać problem.
  • Jeśli moduł nie został załadowany, sprawdź następujące elementy, aby znaleźć przyczynę:
    • Upewnij się, że debugujesz właściwy proces.
    • Sprawdź, czy debugujesz odpowiedni kod. Możesz dowiedzieć się, jakiego typu kod debuger jest skonfigurowany do debugowania w oknie Procesy (Debugowanie>procesówsystemu Windows>). Jeśli na przykład próbujesz debugować kod w języku C#, upewnij się, że debuger jest skonfigurowany pod kątem odpowiedniego typu i wersji platformy .NET (na przykład Managed (v4*) versus Managed (v2*/v3*) versus Managed (CoreCLR)).

"… bieżący kod źródłowy różni się od wersji wbudowanej..."

Jeśli plik źródłowy został zmieniony, a źródło nie jest już zgodne z kodem, który debugujesz, debuger domyślnie nie ustawi punktów przerwania w kodzie. Zwykle ten problem występuje po zmianie pliku źródłowego, ale kod źródłowy nie został ponownie utworzony. Aby rozwiązać ten problem, ponownie skompiluj projekt. Jeśli system kompilacji uważa, że projekt jest już aktualny, nawet jeśli tak nie jest, możesz wymusić ponowną kompilację systemu projektów. 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 pasującego kodu źródłowego może prowadzić do mylącego środowiska debugowania, dlatego upewnij się, że chcesz kontynuować.

Postępuj zgodnie z 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 hiperłącze, aby zezwolić na modyfikację lokalizacji punktu przerwania, i zaznacz opcję Zezwalaj na to, aby kod źródłowy różnił się od oryginalnego.
  • Aby zmodyfikować to ustawienie dla wszystkich punktów przerwania, przejdź do pozycjiOpcje i ustawieniadebugowania>. Na stronie Debugging/General (Debugowanie/ogólne ) wyczyść opcję Wymagaj plików źródłowych, która dokładnie odpowiada oryginalnej wersji . Pamiętaj, aby po zakończeniu debugowania można było ponownie włączyć tę opcję.

Punkt przerwania został pomyślnie ustawiony (bez ostrzeżenia), ale nie został trafiony

Ta sekcja zawiera informacje umożliwiające rozwiązywanie problemów, gdy debuger nie wyświetla żadnych ostrzeżeń — punkt przerwania jest jednolitym czerwonym okręgiem podczas aktywnego debugowania, ale punkt przerwania nie jest osiągany.

Oto kilka rzeczy do sprawdzenia:

  1. Jeśli kod działa w więcej niż jednym procesie lub na więcej niż jednym komputerze, upewnij się, że debugujesz właściwy proces lub komputer.
  2. Upewnij się, że kod jest uruchomiony. Aby sprawdzić, czy kod jest uruchomiony, dodaj wywołanie polecenia 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.
  3. Jeśli debugujesz zoptymalizowany kod, upewnij się, że funkcja, w której ustawiono punkt przerwania, nie jest wbudowana w inną funkcję. Test Debugger.Break opisany w poprzednim czeku może również działać w celu przetestowania tego problemu.
  4. Aby dołączyć do scenariuszy procesów, upewnij się, że debugujesz odpowiedni typ kodu (na przykład kod skryptu w porównaniu z .NET Framework a .NET 5+). Aby zbadać ten problem, zaznacz opcję Dołącz do w oknie dialogowym Dołączanie do procesu i w razie potrzeby wybierz pozycję Wybierz, aby zmienić typ kodu.

Usunięto punkt przerwania, ale po ponownym rozpoczęciu debugowania nadal go osiągam

Jeśli podczas debugowania usunięto punkt przerwania, może nastąpić ponowne trafienie punktu przerwania przy następnym rozpoczęciu debugowania. Aby zatrzymać trafienie tego punktu przerwania, upewnij się, że wszystkie wystąpienia punktu przerwania zostały usunięte z okna Punkty przerwania .