Udostępnij za pośrednictwem


Ś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. 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 został skompilowany 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, a debuger szuka informacji o symbolach dla biblioteki DLL, debuger szuka informacji o symbolach w następujących katalogach wymienionych w następującej kolejności:

  • C:\Dir1\symbols\dll
  • C:\Dir1\dll
  • C:\Dir1

Debuger następnie powtarza ten proces dla każdego katalogu w ścieżce symboli. Na koniec debuger przeszukuje bieżący katalog, a następnie bieżący katalog z dołączonym do niego ..\dll. Debuger dołącza ..\dll, ..\exelub ..\sys, w zależności od debugowania plików binarnych.

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 Pasujące nazwy 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.

Przechowuj symbole w pamięci podręcznej lokalnie

Symbole należy buforować lokalnie. Jednym ze sposobów buforowania symboli lokalnie jest uwzględnienie cache*; lub cache*localsymbolcache;* w ścieżce symboli.

Jeśli w ścieżce symboli dołączysz ciąg cache*;, symbole ładowane z dowolnego elementu, który wydaje się być po prawej stronie tego ciągu, są przechowywane 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 w ścieżce symboli dołączysz ciąg cache*localsymbolcache;, symbole ładowane z dowolnego elementu, który wydaje się być po prawej stronie tego ciągu, są przechowywane 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 znaków 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 w ścieżce symboli dołączysz ciąg cache*;, symbole ładowane z dowolnego elementu, który wydaje się być po prawej stronie tego ciągu, są przechowywane 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 w ścieżce symboli dołączysz ciąg cache*localsymbolcache;, symbole ładowane z dowolnego elementu, który wydaje się być po prawej stronie tego ciągu, są przechowywane 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

Domyślnym zachowaniem debugera jest użycie leniwego ładowania symboli , znanego również jako odroczone ładowanie symboli . Ten rodzaj ładowania oznacza, że symbole nie są ładowane, dopóki nie będą wymagane.

Po zmianie ścieżki symboli, na przykład przy użyciu polecenia .sympath, wszystkie załadowane moduły z symbolami eksportu są ponownie ładowane w sposób opóźniony.

Symbole modułów z pełnymi symbolami PDB są ładowane z opóźnieniem, jeśli nowa ścieżka nie obejmuje już początkowej ścieżki, którą użyto do załadowania symboli PDB. Jeśli nowa ścieżka nadal zawiera oryginalną ścieżkę do pliku symboli PDB, te symbole nie są ładowane z opóźnieniem.

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).

Kontrolowanie ścieżki symboli

Aby kontrolować ścieżkę symboli, możesz wybrać 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ą, wystarczy wpisać .symfix C:\MyCache.

  • Użyj polecenia .sympath, aby wyświetlić, ustawić, zmienić lub dołączyć 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 ścieżka jest ustawiana za pośrednictwem _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 systemie WinDbg można użyć pliku | Symbol Ścieżka pliku polecenie lub naciśnij CTRL+S, aby wyświetlić, ustawić, zmienić lub dołączyć do ścieżki.

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

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.

Zobacz też

Symbole

Zaawansowane użycie SymSrv

.sympath komenda

.symfix