2008-09-09 15 views
7

Muszę użyć komponentu innej firmy bez kodu źródłowego. Mam plik DLL wydania i zwalniam plik PDB. Nazwijmy go "CorporateComponent.dll". Mój własny kod tworzy obiekty z tej biblioteki DLL i wywołuje metody na tych obiektach.Co otrzymuje PDB podczas debugowania i skąd wiadomo, że działa?

CorpObject o = new CorpObject(); 
Int32 result = o.DoSomethingLousy(); 

Podczas debugowania metoda "DoSomethingLousy" zgłasza wyjątek. Co robi dla mnie plik PDB? Jeśli robi coś miłego, jak mogę się upewnić, że go używam?

Odpowiedz

6

Aby sprawdzić, czy używasz dostarczonego PDB, CorporateComponent.pdb, podczas debugowania w Visual Studio IDE przejrzyj okno wyjściowe i zlokalizuj linię wskazujące, że plik CorporateComponent.dll jest ładowany i następuje po nim ciąg znaków Symbols loaded.

celu zilustrowania od projektu kopalni:

The thread 0x6a0 has exited with code 0 (0x0). 
The thread 0x1f78 has exited with code 0 (0x0). 
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug \AvayaConfigurationService.exe', Symbols loaded. 
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug\IPOConfigService.dll', No symbols loaded. 

Loaded 'C:\Development\src...\bin\Debug\AvayaConfigurationService.exe', Symbols loaded.

Oznacza to, że stwierdzono PDB i ładowane debugera IDE.

Jak wskazują inne osoby Podczas badania ramek stosów w aplikacji, powinieneś zobaczyć symbole z pliku CorporateComponent.pdb. Jeśli nie, to być może strona trzecia nie zawiera informacji o symbolu w wersji wstępnej PDB.

4

PDB to plik bazy danych, który odwzorowuje instrukcje na ich numery linii w oryginalnym kodzie, więc gdy otrzymasz ślad stosu, otrzymasz numery linii kodu. Jeśli jest to niezarządzana biblioteka DLL, wówczas plik PDB poda również nazwy funkcji w stosie śledzenia, podczas gdy informacje te są zwykle dostępne tylko dla zarządzanych bibliotek DLL bez PDB.

0

Główną wersją otrzymaną z pdb są numery linii i rzeczywiste nazwy metod dla śladów stosu.

5

Plik pdb zawiera informacje, których potrzebuje debugger, aby poprawnie odczytać stos. Twoje ślady stosu będą zawierały numery linii i nazwy symboli ramek stosów wewnątrz modułów, dla których masz pdb.

Podam dwa przykłady użycia. Pierwsza to oczywista odpowiedź. Drugi wyjaśnia pdb zindeksowane źródłami.

1-te przykład użycia ...

zależności nazywając konwencję i który optymalizacje kompilatora używany, może nie być możliwe dla debugera ręcznie odprężyć stosu poprzez moduł, dla którego nie mają PDB. Może się to zdarzyć w przypadku niektórych bibliotek stron trzecich, a nawet niektórych części systemu operacyjnego.

Rozważ scenariusz, w którym wystąpi naruszenie dostępu w systemie operacyjnym Windows. Śledzenie stosu nie rozwija się we własnej aplikacji, ponieważ ten składnik systemu operacyjnego wykorzystuje specjalną konwencję wywołującą dezorientację w debugerze. Jeśli skonfigurujesz ścieżkę symbolu, aby pobrać publiczne pdb OS, istnieje duża szansa, że ​​ślad stosu rozwinie się w twojej aplikacji. To pozwala zobaczyć dokładnie, jakie argumenty twój własny kod przeszedł do wywołania systemowego OS. (I podobnym przykładem AV wewnątrz 3rd biblioteki partii lub nawet wewnątrz własnego kodu)

2-te Przykład użycia ...

Pdb mają inny bardzo przydatne właściwości - można je zintegrować z niektórych systemach kontroli źródła przy użyciu funkcja, którą program microsoft nazywa "indeksowaniem źródeł". Plik pdb z indeksem źródłowym zawiera polecenia sterujące źródłami, które określają sposób pobierania z kontrolki źródłowej dokładnych wersji plików użytych do zbudowania komponentu. Debugerzy Microsoftu wiedzą, jak wykonać polecenia, aby automatycznie pobrać pliki podczas sesji debugowania. Jest to potężna funkcja, która oszczędza generatora debugowania przed ręczną synchronizacją drzewa źródłowego z poprawną etykietą dla danej kompilacji. Jest to szczególnie przydatne do zdalnych sesji debugowania i do analizy wypadków powypadkowych.

Instalacja "narzędzia do debugowania dla systemu Windows" (windbg) zawiera dokument o nazwie srcsrv.doc, który stanowi przykład demonstrujący, jak używać srctool.exe do określania, które pliki źródłowe są indeksowane źródłowo w danym pdb.

Aby odpowiedzieć na pytanie "skąd mam wiedzieć", funkcja "moduły" w debugerze może powiedzieć, które moduły mają odpowiedni pdb. W windbg użyj polecenia "lml". W visual studio wybierz moduły z dowolnego miejsca w menu debugowania.(przykro mi, nie mam aktualnej wersji podręcznego studia) pod ręką)

Powiązane problemy