Udostępnij przez


Korzystanie z programu SymSrv

Program SymSrv dostarcza pliki symboli ze scentralizowanych magazynów symboli. Te magazyny mogą zawierać dowolną liczbę plików symboli odpowiadających dowolnej liczbie programów lub systemów operacyjnych. Sklepy mogą również zawierać pliki binarne, które są szczególnie przydatne podczas debugowania plików typu minidump.

Sklepy mogą zawierać rzeczywiste symbole i pliki binarne lub po prostu wskaźniki do plików symboli. Jeśli repozytorium zawiera wskaźniki, program SymSrv pobierze rzeczywiste pliki bezpośrednio ze źródeł.

Program SymSrv może również oddzielić duży magazyn symboli w mniejszy podzestaw, który jest odpowiedni dla wyspecjalizowanego zadania debugowania.

Na koniec program SymSrv może uzyskać pliki symboli ze źródła HTTP lub HTTPS przy użyciu informacji logowania dostarczonych przez system operacyjny. Program SymSrv obsługuje witryny HTTPS chronione przez karty inteligentne, certyfikaty i zwykłe identyfikatory logowania i hasła.

Ustawianie ścieżki symboli

Zgodnie z opisem w ścieżki symboliścieżka symboli w zmiennej środowiskowej _NT_SYMBOL_PATH może składać się z kilku elementów ścieżki oddzielonych średnikami. Jeśli co najmniej jeden z tych elementów ścieżki zaczyna się od tekstu "srv*", element jest serwerem symboli i użyje SymSrv do zlokalizowania plików symboli.

Notatka

Jeśli tekst "srv*" nie zostanie określony, ale rzeczywisty element ścieżki jest magazynem serwera symboli, procedura obsługi symboli będzie działać tak, jakby określono "srv*". Procedura obsługi symboli określa to, wyszukując istnienie pliku o nazwie "pingme.txt" w katalogu głównym określonej ścieżki.

 

Podobnie jak ścieżki symboli składają się z elementów ścieżki symboli oddzielonych średnikami, serwery symboli składają się z elementów magazynu symboli oddzielonych gwiazdkami. Po prefiksie "srv*" może istnieć do 10 magazynów symboli. Magazyny wymienione po lewej stronie listy są nazywane podrzędnych magazynów i magazynów po prawej stronie są nazywane nadrzędnych magazynów.

srv\**SymbolStore* srv\**SymbolStore1*\**SymbolStoreN*

Jeśli w ścieżce znajduje się tylko jeden element magazynu symboli, program SymSrv podejmie próbę użycia dowolnego żądanego pliku bezpośrednio z tego magazynu.

Jeśli w ścieżce znajdują się dwa magazyny symboli, SymSrv szuka pliku symboli w najbardziej skrajnym z lewej magazynie symboli. Jeśli plik jest tam, jest używany. Jeśli nie ma go tam, SymSrv natychmiast sprawdza magazyn symboli po prawej stronie. Jeśli plik jest tam, jest kopiowany do lewej pamięci i otwierany z tego miejsca.

Jeśli istnieje więcej niż dwa magazyny, to zachowanie będzie kontynuowane po prawej stronie do momentu znalezienia pliku lub nie ma więcej magazynów na liście.

Plik nigdy nie jest otwierany z żadnego sklepu oprócz lewego sklepu. Jeśli plik zostanie znaleziony w dowolnym miejscu w łańcuchu, zostanie skopiowany do każdej przechowalni na lewo od niego. Ten proces kopiowania jest nazywany "kaskadowym" i zapewnia pewne korzyści, które zostaną wyjaśnione w dalszej części tego dokumentu.

Typy repozytoriów symboli

W poniższej tabeli przedstawiono przykłady obsługiwanych typów magazynów symboli.

Typ magazynu symboli Opis
\\server\share W pełni kwalifikowana ścieżka UNC do udziału na serwerze zdalnym.
c:\LocalCache Ścieżka do katalogu na komputerze klienckim.
https://InternetSite Adres URL witryny internetowej hostująca symbole. Musi być sklepem najbardziej po prawej stronie na liście i nie powinien być jedynym sklepem na liście.
https://SecureInternetSite Adres URL bezpiecznej witryny internetowej hostująca symbole. Może to obsługiwać hasła, poświadczenia logowania systemu Windows, certyfikaty i karty inteligentne. Musi być sklepem najbardziej po prawej stronie na liście i nie powinien być jedynym sklepem na liście.
<puste> Jeśli nie ma tekstu między dwiema gwiazdkami, oznacza to domyślny magazyn podrzędny . Lokalizacja jest ustawiana przez wywołanie SymSetHomeDirectory. Wartość domyślna to katalog o nazwie "sym" bezpośrednio pod katalogiem programu aplikacji wywołującej. Czasami jest to nazywane domyślną lokalną pamięcią podręczną .

 

Ponieważ nie można zapisać magazynu symboli opartego na protokole HTTP, musi on być ostatnim magazynem na liście. Jeśli magazyn symboli oparty na protokole HTTP znajduje się w środku lub po lewej stronie listy sklepów, nie będzie można skopiować żadnych znalezionych plików do niego, a łańcuch zostanie przerwany. Ponadto, ponieważ program obsługi symboli nie może otworzyć pliku z witryny internetowej, magazyn oparty na protokole HTTP nie powinien być pierwszym ani jedynym magazynem na liście. Jeśli SymSrv kiedykolwiek zostanie przedstawiony z tą ścieżką symboli, podejmie próbę naprawy, kopiując plik do domyślnego magazynu podrzędnego i otworzy go stamtąd, niezależnie od tego, czy domyślny magazyn podrzędny jest wskazywany w ścieżce symboli, czy nie.

Przykłady

Aby użyć programu SymSrv z magazynem symboli w folderze \\mybuilds\mysymbols, ustaw następującą ścieżkę symbolu:

set _NT_SYMBOL_PATH= srv*\\mybuilds\mysymbols

Aby ustawić ścieżkę symboli tak, aby debuger skopiował pliki symboli z magazynu symboli w folderze \\mybuilds\mysymbols do katalogu lokalnego c:\localsymbols, użyj:

set _NT_SYMBOL_PATH=srv*c:\localsymbols*\\mybuilds\mysymbols

Aby ustawić ścieżkę symboli tak, aby debuger skopiował pliki symboli z magazynu symboli w folderze \\mybuilds\mysymbols do domyślnego magazynu podrzędnego (zazwyczaj c:\debuggers\sym), użyj:

set _NT_SYMBOL_PATH=srv**\\mybuilds\mysymbols

Aby użyć magazynu kaskadowego, ustaw następującą ścieżkę symbolu:

ustawić _NT_SYMBOL_PATH = srv*c:\localsymbols*\\NearbyServer\store*https://DistantServer

W tym przykładzie SymSrv najpierw wyszukuje plik w folderze c:\localsymbols. Jeśli zostanie tam znaleziony, zwróci ścieżkę do pliku. W przeciwnym razie SymSrv szuka pliku w \\NearbyServer\store. Jeśli go tam znajdziesz, SymSrv kopiuje plik do c:\localsymbols i zwraca ścieżkę do pliku; Jeśli plik nie zostanie znaleziony, program SymSrv wyszukuje plik w https://DistantServer, a jeśli zostanie tam znaleziony, SymSrv kopiuje plik do \\NearbyServer\store, a następnie do folderu c:\localsymbols.

W tym ostatnim przykładzie pokazano, jak rozsądny projekt ścieżki symboli może służyć do optymalizacji pobierania symboli. Jeśli masz witrynę roboczą z grupą debugerów i wszystkie muszą uzyskać symbole z odległej lokalizacji, możesz skonfigurować wspólny serwer z magazynem symboli w pobliżu wszystkich debugerów. Następnie skonfiguruj każdy debuger przy użyciu powyższej ścieżki symbolu. Pierwszy debuger, który wymaga określonej wersji pliku foo.pdb, pobierze go z https://DistantServer do \\NearbyServer\store, a następnie do własnej maszyny w folderze c:\localsymbols. Następny debuger, który wymaga tego samego pliku, będzie mógł pobrać go z \\NearbyServer\store, ponieważ został już pobrany do tej lokalizacji przez poprzedni debuger. To wielopoziomowe cache pozwala zaoszczędzić znaczący czas i przepustowość sieci.

Microsoft Symbol Store

Firma Microsoft zapewnia dostęp do internetowego serwera symboli, który zawiera pliki symboli dla wielu wersji systemu operacyjnego Windows. Ten wykaz symboli nie ma gwarancji, że zostanie ukończony, ale jest obszerny. Inne produkty firmy Microsoft są również reprezentowane.

Serwer symboli internetowych jest wypełniany różnymi symbolami systemu Windows dla systemów operacyjnych Microsoft Windows, w tym gorącymi poprawkami, dodatekami Service Pack, pakietami zbiorczymi zabezpieczeń i wersjami detalicznymi. Symbole są również dostępne na serwerze dla bieżących wersji beta i kandydatów do wydań dla produktów systemu Windows, a także innych produktów firmy Microsoft, takich jak Microsoft Internet Explorer.

Jeśli masz dostęp do Internetu podczas debugowania, możesz skonfigurować debuger do pobierania symboli zgodnie z potrzebami podczas sesji debugowania, zamiast pobierać pliki symboli oddzielnie przed sesją debugowania. Symbole są pobierane do określonej lokalizacji katalogu, a następnie debuger ładuje je stamtąd.

Adres URL magazynu symboli firmy Microsoft to https://msdl.microsoft.com/download/symbols. W poniższym przykładzie pokazano, jak ustawić ścieżkę symbolu debugera (zastąpić ścieżkę magazynu podrzędnego dla c:\DownstreamStore):

srv*c:\DownstreamStore*https://msdl.microsoft.com/download/symbols

Skompresowane pliki

SymSrv jest zgodny z magazynami symboli, które zawierają skompresowane pliki, o ile ta kompresja została wstępnie sformułowana za pomocą narzędzia compress.exe, które zostało dystrybuowane z zestawem Resource Kit systemu Windows Server 2003. Skompresowane pliki powinny mieć podkreślenie jako ostatni znak w swoich rozszerzeniach plików (na przykład module1.pd_ lub module2.db_). Aby uzyskać szczegółowe informacje, zobacz Using SymStore.

W przypadku kaskadowania pliki nie są nieskompresowane, chyba że magazyn docelowy jest magazynem po lewej stronie w ścieżce. Jeśli w ścieżce znajduje się tylko jeden magazyn zawierający skompresowany plik, program SymSrv skopiuje plik do domyślnego magazynu podrzędnego i otworzy go z tego miejsca, mimo że domyślny magazyn podrzędny nie jest wskazywany w ścieżce symboli.

DbgHelp 6.1 i starsze.: Jeśli pliki w magazynie głównym są skompresowane, należy użyć magazynu podrzędnego. Program SymSrv zdekompresuje wszystkie pliki przed skopiowaniem ich do magazynu podrzędnego.

Usuwanie pamięci podręcznej

Jeśli używasz magazynu podrzędnego jako pamięci podręcznej, możesz usunąć ten katalog w dowolnym momencie, aby zaoszczędzić miejsce na dysku.

Istnieje możliwość posiadania rozległego magazynu symboli, który zawiera pliki symboli dla wielu różnych programów lub wersji systemu Windows. Jeśli uaktualnisz wersję systemu Windows używaną na komputerze docelowym, buforowane pliki symboli będą zgodne ze starszą wersją. Te buforowane pliki nie będą nadal używane, dlatego może to być dobry moment na usunięcie pamięci podręcznej.

Narzędzia debugowania dla systemu Windows są dostarczane z narzędziem o nazwie agestore.exe, które selektywnie usuwa pliki z drzewa katalogów, pozostawiając ostatnio używane pliki. To narzędzie jest przeznaczone do oczyszczania nieużywanych plików z magazynów serwera symboli. Umożliwia kontrolowanie wielu opcji, w tym algorytmów związanych z datą zakończenia i rozmiarem katalogu.

Katalog pamięci podręcznej typu flat

Można zadeklarować domyślny magazyn podrzędny jako katalog płaski, a nie standardową strukturę drzewa symboli. W tym celu wywołaj funkcję SymSetOptions za pomocą SYMOPT_FLAT_DIRECTORY (spowoduje to również ustawienie opcji SSRVOPT_FLAT_DEFAULT_STORE w programie SymSrv). Przed wykonaniem tej czynności należy wywołać SymSetHomeDirectory; w przeciwnym razie pliki symboli mogą zostać zapisane w katalogu programu.

Pliki wskaźnika

Magazyn SymStore może tworzyć i używać plików wskazujących plik docelowy, a nie sam plik docelowy. Jeśli magazyn symboli zawiera taki plik wskaźnika, domyślnym działaniem jest skopiowanie pliku z lokalizacji wskazanej w pliku wskaźnika do magazynu. Aby skonfigurować magazyn tak, aby plik wskaźnika został skopiowany zamiast pliku, do którego wskazuje, utwórz plik o nazwie wantsptr.txt w katalogu głównym magazynu docelowego. Zawartość wantsptr.txt nie jest ważna, tylko obecność pliku.

Wykluczanie plików z listy symboli

Aby wykluczyć pliki z wyszukiwania symboli, możesz określić ich nazwy w symsrv.ini lub w rejestrze. Aby określić pliki w symsrv.ini, utwórz sekcję o nazwie Wykluczenia i wyświetl listę plików. Nazwy plików mogą zawierać symbole wieloznaczne, jak pokazano w poniższym przykładzie:

[Exclusions]
dbghelp.pdb
symsrv.*
mso*

Symsrv.ini powinny znajdować się w tym samym katalogu, w którym znajduje się symsrv.dll. W większości instalacji plik nie istnieje i należy utworzyć nowy.

Alternatywnie można przechowywać pliki do wykluczenia w rejestrze. Utwórz następujący klucz rejestru: HKEY_LOCAL_MACHINE\Software\Microsoft\Symbol Server\Exclusions. Zapisz każdą nazwę pliku jako wartość ciągu (REG_SZ) w tym kluczu. Nazwa wartości ciągu określa nazwę pliku, który ma zostać wykluczony. Możesz użyć zawartości wartości ciągu do przechowywania komentarza opisującego, dlaczego plik jest wykluczony.

Instalacja

Serwer symboli SymSrv (symsrv.dll) znajduje się w pakiecie Narzędzia debugowania dla systemu Windows. Należy go zainstalować w tym samym katalogu, co kopia dbghelp.dll, którą ładujesz. Aby uzyskać więcej informacji, zobacz Wywoływanie biblioteki DbgHelp.