2009-06-08 11 views
26

Próbuję użyć więcej windbg i mam problemy z pamięcią podręczną symboli. Nie jest dla mnie jasne, jaki powinien być format łańcucha._NT_SYMBOL_PATH format

Mam kilka wymagań:

  • wykorzystanie serwera Microsoft http://msdl.microsoft.com/download/symbols
  • używać symboli z naszym oprogramowaniem, które są archiwizowane w \\ foo \ Build1234
  • używać lokalnej pamięci podręcznej w katalogu c: \ dev \ symbole

Archiwum symboli z naszej rozproszonej kompilacji w \\ foo \ Build1234 nie jest zorganizowane jako serwer symboli. Jeśli rozumiem to poprawnie, muszę użyć słowa kluczowego z pamięci podręcznej.

Biorąc pod uwagę te wymagania, to wygląda prawidłowo sformatowany srvpath:

cache*\\foo\Build1234;srv*c:\dev\symbols*http://msdl.microsoft.com/download/symbols 

Edit:

Właśnie zacząłem czytać Windows Advanced debugowanie i ja błędnie interpretowane jak działa kluczowe cache. Pomyślałem, że to jest sposób mówienia debuggera, że ​​folder jest po prostu folderem plików, a nie serwera symboli. Po tym, jak Michael zostawił swój komentarz, ponownie przeczytałem sekcję i zobaczyłem, że rzeczywiście działa tak, jak opisywał Michael.

Teraz jestem zdezorientowany, kiedy używasz; lub * w celu oddzielenia ścieżek/adresów URL. A kiedy potrzebujesz prefiksu srv *. W pomocy online dla WinDBG dają poniższym przykładzie:

\\someshare\that\cachestar\ignores;srv*c:\mysymbols*http://msdl.microsoft.com/download/symbols;cache*c:\mysymbols;\\anothershare\that\gets\cached 

Symbole z \\ someshare nie są buforowane, symboli firmy Microsoft są buforowane w C: \ mysymbols i C: \ mysymbols służy jako pamięci podręcznej dowolne inne ścieżki po prawej stronie dyrektywy cache *.

Okazjonalne użycie srv * jest mylące - nie rozumiem, dlaczego pierwsza i ostatnia ścieżka nie mają prefiksu srv *.

Edit 2:

To powoli zaczyna mnie sensu. Dyrektywa srv jest używana dla serwerów symboli, a nie dla normalnych katalogów symboli. Tak, uważam, że odpowiedź na moje pierwotne pytanie brzmi:

\\foo\Build1234;cache*c:\dev\symbols;srv*http://msdl.microsoft.com/download/symbols 
+1

pokrewne [Konfigurowanie symboli WinDbg] (https://stackoverflow.com/questions/30019889/how-to-set-up-symbols-in-windbg) –

Odpowiedz

33
SRV*C:\dev\symbols*http://msdl.microsoft.com/download/symbols;\\foo\build1234 

powinien działać dobrze, jeśli \\foo\build1234 jest tylko płaski PDB jest. Pamięć podręczna nie jest tu potrzebna; wystarczy dodać katalog do ścieżki symbolu.

Słowo kluczowe cache określa gdzie chcesz buforować pliki symboli i jest przydatna dla symboli buforowania lokalnie z akcji non-indeksowanych (jak \\foo\build1234)

cache*C:\dev\symbols;SRV*C:\dev\symbols*http://msdl.microsoft.com/download/symbols;\\foo\build1234 

Powyższa ścieżka będzie przechowywać symbole z serwera symboli członkowskiego co i twój symbol udostępniaj do twojego lokalnego komputera w C: \ dev \ symbols.

zagadnieniom symboli debugowania korzystających WinDbg, zrobić

!sym noisy 
.reload <some exe or DLL in your session> 

A potem zrobić jakąś akcję, która zmusiłaby WPB być załadowany. Zobaczysz, gdzie windbg szuka plików, a jeśli odrzuci PDB, dlaczego tak się stało.

!sym quiet 

Powoduje wyłączenie monitów symboli.

+0

Kiedy o symbolu problemy, zawsze używam ".reload -f -a" po włączeniu głośnych ładunków. – LanceSc

+0

Dzięki Michael. Twoja odpowiedź jest poprawna. To, co faktycznie zrobiłem, jest nieco inne. Umieszczam \\\ foo \ build1234 na początku ścieżki, aby nigdy nie było w pamięci podręcznej, określałem moją globalną pamięć podręczną, której chcę używać do wszystkiego, a następnie dodałem adres URL Microsoft. W ten sposób wszelkie dodatkowe ścieżki, które dodaję podczas debugowania, będą korzystać z globalnej pamięci podręcznej, w której chcę, aby to się zachowywało. Dzięki. – criddell