Udostępnij przez


Ścieżka symboli dla debugerów systemu Windows

Ścieżka symbolu określa lokalizacje, w których debugery systemu Windows, takie jak WinDbg, KD, CDB i NTST, szukają plików symboli.

Szybki start:.symfix Użyj polecenia , aby skonfigurować domyślną ścieżkę do publicznego serwera symboli firmy Microsoft — działa to dobrze w większości scenariuszy debugowania.

Poprawnie skonfiguruj ścieżkę symboli, aby umożliwić wydajne debugowanie — debugery mogą automatycznie lokalizować i ładować pliki symboli potrzebne do analizowania wykonywania kodu. W tym przewodniku pokazano, jak skonfigurować ścieżki symboli, używać serwera symboli firmy Microsoft, buforować symbole lokalnie i rozwiązywać typowe problemy. Aby uzyskać więcej informacji na temat symboli i plików symboli, zobacz Symbole.

Niektóre kompilatory, w tym program Microsoft Visual Studio, umieszczają pliki symboli w tym samym katalogu co pliki binarne. Pliki symboli i zaznaczone pliki binarne zawierają informacje o ścieżce i nazwie pliku, co pozwala debugerowi automatycznie znaleźć pliki symboli. Jeśli debugujesz proces trybu użytkownika na komputerze, na którym utworzono plik wykonywalny, a pliki symboli znajdują się w ich oryginalnej lokalizacji, debuger może zlokalizować pliki symboli bez ustawiania ścieżki symboli.

W większości innych sytuacji należy ustawić ścieżkę symbolu tak, aby wskazywała lokalizacje plików symboli.

Napiwek

Użyj .symfix, aby ustawić domyślną ścieżkę do publicznego serwera symboli publicznych firmy Microsoft, który działa dobrze w wielu sytuacjach.

Składnia ścieżki symboli

Ścieżka symboli debugera jest ciągiem składającym się z wielu ścieżek katalogowych oddzielonych średnikami. Na przykład C:\Dir1;C:\Dir2\DirA;C:\Dir2\DirB.

Ścieżki względne są obsługiwane. Należy jednak dodać literę dysku lub udział sieciowy przed ścieżką, chyba że zawsze uruchomisz debuger z tego samego katalogu. Obsługiwane są również udziały sieciowe.

Dla każdego katalogu w ścieżce symboli debuger wyszukuje trzy katalogi. Jeśli na przykład ścieżka symboli zawiera C:\Dir1 i debuger szuka informacji o symbolach dla biblioteki DLL, debuger wyszukuje je w następującej kolejności:

  1. C:\Dir1\symbols\dll
  2. C:\Dir1\dll
  3. C:\Dir1

Debuger powtarza ten proces dla każdego katalogu w ścieżce symboli.

Końcowe lokalizacje rezerwowe:

  • Bieżący katalog
  • Bieżący katalog z elementem ..\dll, ..\exelub ..\sys dołączonym (w zależności od debugowanego typu binarnego)

Pliki symboli mają oznaczenia daty i godziny. Debuger zawsze szuka symboli pasujących do sygnatury czasowej w plikach binarnych, które są debugowane. Nie musisz martwić się, że debuger wykorzysta nieprawidłowe symbole, które pojawią się najpierw w tej sekwencji. Aby uzyskać więcej informacji na temat odpowiedzi, gdy pliki symboli nie są dostępne, zobacz Dopasowywanie nazw symboli.

Jednym ze sposobów ustawienia ścieżki symboli jest wprowadzenie polecenia .sympath. Aby uzyskać inne metody konfiguracji ścieżki symboli, zobacz Kontrolowanie ścieżki symboli w dalszej części tego tematu.

Kontrolowanie ścieżki symboli

Aby kontrolować ścieżkę symboli, wybierz jedną z następujących metod:

  • Użyj polecenia .symfix set symboli store path, aby ustawić domyślną ścieżkę do publicznego serwera symboli firmy Microsoft, który działa dobrze w wielu sytuacjach. Aby ustawić lokalną pamięć podręczną, wpisz .symfix C:\MyCache.

  • Użyj polecenia .sympath , aby wyświetlić, ustawić, zmienić lub dodać do ścieżki.

  • Przed rozpoczęciem debugera użyj _NT_SYMBOL_PATH i _NT_ALT_SYMBOL_PATHzmiennych środowiskowych, aby ustawić ścieżkę. Ścieżka symbolu jest tworzona przez dołączenie _NT_SYMBOL_PATH po _NT_ALT_SYMBOL_PATH. Zazwyczaj należy ustawić ścieżkę za pomocą _NT_SYMBOL_PATH. Można jednak użyć _NT_ALT_SYMBOL_PATH, aby zastąpić te ustawienia w specjalnych przypadkach, na przykład jeśli masz prywatne wersje udostępnionych plików symboli. Jeśli spróbujesz dodać nieprawidłowy katalog za pomocą tych zmiennych środowiskowych, debuger ignoruje ten katalog.

  • Po uruchomieniu debugera użyj opcji wiersza polecenia -y, aby ustawić ścieżkę.

  • Tylko w WinDbg użyj polecenia Ścieżka pliku symboli lub naciśnij CTRL+S, aby wyświetlić, ustawić, zmienić lub dodać do ścieżki.

Jeśli używasz opcji wiersza polecenia -sins, debuger ignoruje zmienną środowiskową ścieżki symboli.

Przechowuj symbole w pamięci podręcznej lokalnie

Zalecamy lokalne buforowanie symboli w celu zwiększenia wydajności debugera i zmniejszenia ruchu sieciowego. Aby buforować symbole, dołącz cache*; lub cache*localsymbolcache; w ścieżce symboli.

Jeśli dołączysz ciąg cache*; do ścieżki symboli, debuger przechowuje symbole ładowane z dowolnego elementu, który pojawia się po prawej stronie tego ciągu w domyślnym katalogu pamięci podręcznej symboli na komputerze lokalnym. Na przykład następujące polecenie poleca debugerowi pobranie symboli z sieci udostępnionej o nazwie \\someshare i zapisanie symboli w pamięci podręcznej w domyślnej lokalizacji na komputerze lokalnym.

.sympath cache*;\\someshare

Jeśli dołączysz ciąg cache*localsymbolcache; do ścieżki symboli, debuger przechowuje symbole ładowane z dowolnego elementu, który pojawia się po prawej stronie tego ciągu w katalogu localsymbolcache .

Na przykład następujące polecenie nakazuje debugerowi uzyskanie symboli z udziału sieciowego \\someshare i buforowanie symboli w katalogu c:\MySymbols.

.sympath cache*C:\MySymbols;\\someshare

Korzystanie z serwera symboli: srv*

Jeśli masz połączenie z Internetem lub siecią firmową, najbardziej efektywnym sposobem uzyskiwania dostępu do symboli jest użycie serwera symboli, takiego jak publiczny serwer symboli publiczny serwer symboli firmy Microsoft. Możesz użyć serwera symboli, stosując jeden z następujących ciągów w ścieżce do symboli.

  • Ciąg srv*

    Jeśli w ścieżce symboli dołączysz ciąg srv*, debuger używa serwera symboli do pobierania symboli z domyślnego magazynu symboli. Na przykład następujące polecenie nakazuje debugerowi pobranie symboli z domyślnego magazynu symboli. Te symbole nie są buforowane na komputerze lokalnym.

    .sympath srv*
    
  • Ciąg srv*symbolstore

    Jeśli w ścieżce symboli dołączysz ciąg srv*symbolstore, debuger używa serwera symboli do pobierania symboli z magazynu symboli . Na przykład następujące polecenie nakazuje debugerowi pobranie symboli z serwera symboli firmy Microsoft store. Te symbole nie są buforowane na komputerze lokalnym.

    .sympath srv*https://msdl.microsoft.com/download/symbols
    
  • Ciąg srv*localsymbolcache*symbolstore

    Jeśli w ścieżce symboli dołączysz ciąg srv*localcache*symbolstore, debuger używa serwera symboli do pobierania symboli z magazynu symboli i buforuje je w katalogu localcache. Na przykład następujące polecenie nakazuje debugerowi pobranie symboli z serwera symboli firmy Microsoft —https://msdl.microsoft.com/download/symbols i buforowanie symboli w c:\MyServerSymbols.

    .sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
    

Jeśli masz katalog na komputerze, na którym ręcznie umieszczasz symbole, nie używaj tego katalogu jako pamięci podręcznej symboli uzyskanych z serwera symboli. Zamiast tego należy użyć dwóch oddzielnych katalogów. Można na przykład ręcznie umieścić symbole w c:\MyRegularSymbols, a następnie wyznaczyć c:\MyServerSymbols jako pamięć podręczną symboli uzyskanych z serwera. W poniższym przykładzie pokazano, jak określić oba katalogi w ścieżce symboli.

.sympath C:\MyRegularSymbols;srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols

Aby uzyskać więcej informacji na temat serwerów symboli i magazynów symboli, zobacz Magazyny symboli niestandardowych i serwery symboli.

Połącz pamięć podręczną* i srv*

Jeśli dołączysz ciąg cache*; do ścieżki symboli, debuger przechowuje symbole ładowane z dowolnego elementu, który pojawia się po prawej stronie tego ciągu w domyślnym katalogu pamięci podręcznej symboli na komputerze lokalnym. Na przykład następujące polecenie nakazuje debugerowi pobranie symboli z serwera symboli microsoft przechowywać i buforować je w domyślnym katalogu pamięci podręcznej symboli.

.sympath cache*;srv*https://msdl.microsoft.com/download/symbols

Jeśli dołączysz ciąg cache*localsymbolcache; do ścieżki symboli, debuger przechowuje symbole ładowane z dowolnego elementu, który pojawia się po prawej stronie tego ciągu w katalogu localsymbolcache .

Na przykład następujące polecenie nakazuje debugerowi pobranie symboli z serwera symboli firmy Microsoft magazynu i buforowania symboli w katalogu c:\MySymbols.

.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols

Użyj narzędzia AgeStore, aby zmniejszyć rozmiar pamięci podręcznej

Możesz użyć narzędzia AgeStore, aby usunąć buforowane pliki starsze niż określona data lub usunąć wystarczająco stare pliki, aby wynikowy rozmiar pamięci podręcznej był mniejszy niż określona ilość. Czyszczenie plików pamięci podręcznej jest przydatne, jeśli magazyn danych w systemie końcowym staje się zbyt duży.

Ładowanie symboli z opóźnieniem

Debugger domyślnie używa leniwego ładowania symboli. Ten rodzaj ładowania oznacza, że debuger nie ładuje symboli, dopóki ich nie potrzebuje.

Po zmianie ścieżki symboli, na przykład przy użyciu polecenia .sympath, debuger ponownie ładuje wszystkie załadowane moduły z eksportowanymi symbolami w trybie leniwym.

Debuger leniwie ponownie ładuje symbole modułów z pełnymi symbolami PDB, jeśli nowa ścieżka nie zawiera już oryginalnej ścieżki, która została użyta do załadowania symboli PDB. Jeśli nowa ścieżka nadal zawiera oryginalną ścieżkę do pliku symboli PDB, debuger nie ładuje ponownie tych symboli.

Można wyłączyć leniwe ładowanie symboli w narzędziach CDB i KD, używając opcji wiersza poleceń -s. Możesz również wymusić ładowanie symboli, używając polecenia ld load symbols lub polecenia .reload wraz z opcją modułu/f.

Artefakty usługi Azure DevOps Services

Serwer symboli jest dostępny w usłudze Azure Artifacts w usłudze Azure DevOps Services. Aby dowiedzieć się więcej o pracy z usługą Azure Artifacts w usłudze WinDbg, zobacz Debugowanie za pomocą symboli w usłudze WinDbg (Azure Artifacts). Aby uzyskać ogólne informacje na temat symboli generowanych przez platformę Azure, zobacz Symbole — omówienie (Azure Artifacts).

Rozwiązywanie problemów

Użyj !sym hałaśliwy lub -nCommand-Line Opcja WinDbg, aby wyświetlić dodatkowe szczegóły w miarę ładowania symboli. Aby uzyskać dodatkowe strategie rozwiązywania problemów, zobacz Weryfikowanie symboli.

Dalsze kroki

Po skonfigurowaniu ścieżki symboli dowiedz się, jak sprawdzić, czy symbole są ładowane poprawnie i rozwiązywać typowe problemy:

Powiązane zadania:

Dokumentacja poleceń: