Ś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
, ..\exe
lub ..\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 wc:\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_PATH
zmiennych ś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.