Rozdzielczość symbolu WinDbg

Podczas korzystania z WinDbg, gdzie powinny znajdować się prywatne pliki symboli (pdb?) być umieszczone?

Moja sytuacja jest taka: mam DLL, który chcę debugować. Mam kod źródłowy i pliki symboli dla tego DLL. Ta biblioteka DLL jest wywoływana przez inną bibliotekę DLL (dla której nie mam symboli ani źródła), która z kolei jest wywoływana przez EXE (dla którego również nie mam symboli ani źródła).

Mój problem polega na tym, że dostaję Ostrzeżenie, które mówi

*** WARNING: Unable to verify checksum for C:\TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dll

To Ostrzeżenie chyba jest powodem, dla którego otrzymuję następujący typ wiadomości w stosie połączeń:

MyDll!AClass:: AFunction+SomeHexAddress

Moja struktura plików wygląda mniej więcej tak:

Exe: C:\TheProgram\program.exe

Wywołujący dll: C\TheProgram\SomeSubfolder\caller.???

Mój DLL, który chcę debugować: C:\TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dll

Uwaga: ustawiam ścieżkę pliku symbolu i ścieżkę pliku źródłowego do miejsca generowania biblioteki debugowania, w moim obszarze roboczym na innym dysku niż exe.. Ale skopiowałem pliki pdb + map i umieściłem je w dll, który chciałem debugować..

Author: krebstar, 2009-01-23

4 answers

Przepraszam za późną odpowiedź.
W swoim poście wspominasz, że widzisz następujący komunikat o błędzie.

*** WARNING: Unable to verify checksum for C:\TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dll

Zadajesz również pytanie: "gdzie umieścić moje symbole dla mojej biblioteki DLL w ścieżce symboli?"

Oto odpowiedź na pierwszy problem:

Kroki do identyfikacji niedopasowanych symboli.

  1. !sym noisy
  2. .przeładuj
  3. x MyDll!* class *
    * To przeładowuje dll, alternatywnie można wpisać kb, aby wyświetlić wywołanie stos DLL, który powinien go również załadować.
  4. !sym quiet
    * Reset wraca do oryginalnego cichego ładowania symbolu

Również można uruchomić

0:001> lmv m myDll  *(and examine the Checksum)

Uwaga: Jeśli masz sumę kontrolną, Windbg może dopasować sumę kontrolną DLL do sumy kontrolnej PDB. Każde środowisko programistyczne ma inny sposób generowania sumy kontrolnej.

Oto odpowiedź na pytania, gdzie umieścić PDBs

Jeśli masz MyDll.pdb dodany do a przechowuj symbol wtedy możesz użyć następującej składni
.sympath SRV*c:\symcache*http://msdl.microsoft.com/download/symbols 

Jak zasugerował Roger powyżej...

Jeśli jednak masz tylko plik PDB lokalnie, możesz najpierw umieścić ścieżkę do pliku PDB przed wyjściem do serwera symboli w ten sposób

.sympath C:\TheProgram\SomeSubfolder\AnotherSubfolder\;SRV*c:\symcache*http://msdl.microsoft.com/download/symbols

W ten sposób Windbg powinien wyglądać lokalnie do katalogu SomSubFolder przed próbą użycia Symbols Server cache.

Dzięki, Aaron

 42
Author: AaronBa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-21 21:46:29

Nie ma znaczenia, gdzie umieszczasz prywatne pliki symboli, o ile jesteś w stanie powiedzieć debuggerowi, gdzie one są.

Ostrzeżenie, które widzisz nie ma żadnego wpływu na ślad stosu, ale fakt, że brakuje symboli dla wywołującego.DLL i app.EXE robi .

Konfiguracja symboli w windbg (lokalnie) jest tak prosta jak użycie:

.sympath [+] path_to_pdbs
*i
.symfix + path_to_system_pdb_store

Ty seeing:

MyDll!AClass:: AFunction+SomeHexAddress właściwie nic nie znaczy tak długo, jak SomeHexAddress jest rozsądny (i pod warunkiem, że MyDll.pdb zostało znalezione i załadowane!)- wygląda jak właściwy wpis stosu wywołań.

Moje pytanie brzmi: w czym tkwi problem?

P. S. nie potrzebujesz .plik mapy z windbg.

 4
Author: deemok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-10 10:03:08

W ramach naszego procesu budowania, kopiujemy prywatne pliki PDB i wydane pliki EXE / DLL na serwer symboli. W najprostszym przypadku jest to tylko ścieżka UNC, ale możesz skonfigurować ją pod kątem dostępu za pomocą HTTP.

Aby skopiować pliki wyjściowe, użyj SYMSTORE.Program EXE.

Następnie skonfiguruj swój debugger (używamy Visual Studio i WinDbg), aby spojrzeć w tę ścieżkę. W przypadku WinDbg najprostszym sposobem na to jest ustawienie zmiennej środowiskowej:

_NT_SYMBOL_PATH=
    SRV*C:\WebSymbols*http://msdl.microsoft.com/download/symbols;
    \\symsvr\Symbols

(to wszystko powinno być na jednym linia)

Konfiguruje WinDbg tak, aby wyglądał na Microsoft Symbol Server (buforowanie plików w C:\WebSymbols), a także szukać w lokalnym magazynie symboli (\\symsvr\Symbols).

Używamy również narzędzi serwera źródłowego do przechowywania szczegółów SVN w pliku PDB, co oznacza, że możemy wrócić do dokładnego pliku źródłowego używanego do budowy konkretnego wydania. Zajrzyj do ...\Debugging Tools for Windows (x86)\srcsrv.

 3
Author: Roger Lipscombe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-23 10:25:36

Jedną z opcji jest pozostawienie plików symboli tam, gdzie się znajdują (tj. w folderze wyjściowym kompilacji), a następnie użycie opcji linii poleceń -y WinDbg do zlokalizowania tych plików. Zastosowanie tego podejścia powinno zagwarantować, że pliki symboli są zawsze aktualne.

Z pomocy Microsoftu:

-y SymbolPath 
Specifies the symbol search path. Separate multiple paths with a 
semicolon (;). If the path contains spaces, it should be enclosed 
in quotation marks. For details, and for other ways to change this 
path, see Symbol Path. 
 2
Author: jussij,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-23 04:15:13