Debugowanie wersji release biblioteki DLL (z plikiem PDB)

Jeśli mam DLL (który został zbudowany w trybie release) i odpowiadający mu plik PDB, czy jest możliwe debugowanie (krok do) klas / metod zawartych w tym DLL?

Jeśli tak, to jakie są wymagane kroki/konfiguracja (np. gdzie umieścić plik PDB)?

Edit:

Jeśli plik PDB znajduje się w tym samym miejscu co DLL (w katalogu bin / debug prostej aplikacji testowej konsoli). Widzę, że symbole dla DLL są ładowane (w oknie wyjściowym, a także w okno modułów), ale nadal nie mogę przejść do metod tego DLL.

Czy to może być wynik optymalizacji kompilatora (jak to opisał Michael w odpowiedzi)?

Author: SamB, 2009-04-21

4 answers

Pdb jest zwykle (przynajmniej dla mnie) wykrywany, jeśli znajduje się obok dll (jak w plikach intellisense xml).

Alternatywnie; będziesz potrzebował punktu przerwania po załadowaniu modułu...

W punkcie przerwania Uruchom okno "Moduły" (Ctrl + D, M-lub Debug - >Windows - > Moduły). Kliknij prawym przyciskiem myszy na dll "załaduj symbole z", "Ścieżka symboli", itp.

 14
Author: Marc Gravell,
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-04-20 20:45:29

Tak, możesz debugować kod Wydania za pomocą PDB. Istnieją jednak pewne pułapki związane z debugowaniem zoptymalizowanego kodu, więcej informacji tutaj i Tutaj .

Twój PDB musi być tylko w miejscu, w którym debugger może go znaleźć - dla lokalnego debugowania ten sam katalog co dll jest zwykle najłatwiejszy. W przeciwnym razie umieść go w jakimś miejscu, w którym debugger może go znaleźć i skieruj debuggera w to miejsce za pomocą ścieżki symbolu.

 5
Author: Michael,
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
2017-05-23 12:23:47

W końcu znalazłem przyczynę problemów z debugowaniem biblioteki DLL, która została zbudowana w konfiguracji release:

Po pierwsze, zasadniczo działa zgodnie z oczekiwaniami. Co oznacza, że jeśli mam wbudowany DLL w release-configuration plus odpowiedni plik PDB, to mogę debugować klasy / metody zawarte w tym DLL.

Kiedy po raz pierwszy próbowałem tego, niestety próbowałem przejść do metod klasy, która ma DebuggerStepThroughAttribute , np:

[System.Diagnostics.DebuggerStepThrough]
public class MyClass {
    public void Test() { ... }
}

W takim przypadku nie jest oczywiście możliwe przejście do metody z debuggera (zgodnie z oczekiwaniami/założeniami).

Więc wszystko działa zgodnie z przeznaczeniem. Wielkie dzięki za odpowiedzi.
 5
Author: M4N,
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-04-22 12:42:38

Debugowanie kompilacji wydania jest zwykle znacznie trudniejsze niż debugowanie wersji debugowania. Ogólnie rzecz biorąc, będziesz potrzebował trochę zrozumienia asemblera x86 i prawdopodobnie spędzisz trochę czasu patrząc na okno demontażu. To wydaje się być jedynym sposobem, aby dowiedzieć się, na jakiej linii kodu naprawdę się znajdujesz, ponieważ w kompilatorze wersji z optymalizacjami może zrobić znaczącą inlining i zmianę kolejności instrukcji. Ponadto uważam, że debugger często nie poprawnie raportuje wartości zmienne. Jeśli chcesz znać wartość zmiennej i nie jesteś pewien, czy debugger jest poprawny, przejdź do okna demontażu i znajdź lokalizację pamięci lub zarejestruj, w której się znajduje.

Pliki pdb mogą być przechowywane na serwerze symboli. Sprawdź Konfigurowanie serwera symboli , Aby uzyskać dobry samouczek. Każdy produkt, który zbudujemy na maszynie kompilacyjnej, publikuje symbole na naszym serwerze symboli, więc zawsze możemy debugować wszelkie zrzuty awaryjne, które otrzymamy od WinQual.

 2
Author: Stephen Nutt,
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-04-21 01:28:58