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)?
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.
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.
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.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.
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