2013-07-16 10 views
7

Budujemy rozwiązanie do wydania, ale przy próbie dołączenia za pomocą profesjonalnego studio 2010, żaden wątek nie pokazuje żadnych informacji o stosie, ani żadnego punktu przerwania nie można ustawić, itp.Nie można debugować aplikacji w trybie zwolnienia, nawet jeśli DebugType = pełna

Celem jest umożliwienie dołączenia debugera Visual Studio/JIT do uruchomionego procesu przy jednoczesnym zapewnieniu jak największej optymalizacji.

Większość naszych wyszukiwań sprowadza się do "kompilacji z debugowaniem: pełna" i będziesz w stanie debugować, ale to nie wydaje się być prawdą. Uważam, że JIT optymalizuje kod w czasie wykonywania, a tym samym nie można debugować, czy to prawda? Czy można skompilować i powiadomić JIT o zmniejszeniu optymalizacji i umożliwieniu debugowania? (Zachowując inne optymalizacje)

UPDATE

za pomocą @ odpowiedzi HansPassant za, spojrzałem na modułach i zobaczyłem, że chociaż pdbs są w tym samym katalogu co pliki binarne, rzeczywiście nie ma symboli debugowania zostały załadowane. zauważyłem też, że moje biblioteki są oznaczone jako "kod użytkownika" - "NIE", co prawdopodobnie jest przyczyną automatycznego ładowania. Ładowanie symboli ręcznie i wyłączenie "just-my-code" Byłem również w stanie ustawić punkty przerwania i zobaczyć stosy.

Pytanie teraz: dlaczego mój kod nie jest oznaczony jako kod użytkownika? czy to normalne zachowanie? czy mogę skonfigurować to do moich złożeń w jakiś sposób, aby tego uniknąć?

+0

"ani żadnego punktu przerwania nie można ustawić" <- czemu nie? czy jest to "brak pasujących symboli" msg? – wal

+0

@wal Zobacz zaktualizowane pytanie, było to połączenie brakujących symboli i "just-my-code" wyłączone. –

Odpowiedz

13

Debugowanie zoptymalizowanego kodu nie jest wielką przyjemnością. Z pewnością możesz mieć problem z ustawianiem punktów przerwania, metoda może być wbudowana. Sprawdzanie lokalnych zmiennych i argumentów metodowych może spowodować dezorientację debuggera, gdy zmienna zostanie zoptymalizowana do zapisania w rejestrze procesora.

Jednak z pewnością można jeszcze sprawdzić stosy połączeń, zobaczysz metody, które nie zostały wbudowane w ślad stosu. Podstawowe błędy, które możesz popełnić:

  • po podłączeniu debuggera otrzymasz opcję wyboru typu debuggera. Pamiętaj, aby wybrać "Zarządzane", nie będziesz miał wiele pożytku z natywnego debuggera, aby upewnić się, że patrzysz na właściwy wątek, program może zostać złamany w dowolnej lokalizacji. Użyj opcji Debuguj + Windows + wątki, aby wybrać odpowiedni wątek, aby upewnić się, że faktycznie złamałeś lokalizację w kodzie. Możesz łatwo skończyć w bibliotece DLL systemu operacyjnego Windows lub w metodzie ramowej, w takim przypadku będzie bardzo mało do obejrzenia. Narzędzia + Opcje, Debugowanie, Symbole i włącz serwer symboli, aby śledzić stosy, które rozpoczynają się w systemie Windows, były dokładne, aby debugger mógł zlokalizować pliki PDB. Użyj Debug + Windows + Modules, zobaczysz załadowane w procesie zespoły. Najpierw upewnij się, że ten, który chcesz debugować, jest załadowany. Kliknij go prawym przyciskiem myszy i wybierz "Informacje o ładowaniu symboli". Pokazuje, gdzie szukał pliku PDB, aby opcja "just my code" mogła mocno przeszkodzić, bardzo prawdopodobne jest, że natkniesz się na znaczące fragmenty kodu, które nie są twoje. Narzędzia + Opcje, Debugowanie, Ogólne i wyłącz tę opcję.
+2

(+1) Okno "Moduły" pokazało, że moje złoenia nie są traktowane jako kod użytkownika, zobacz zaktualizowane pytanie –

Powiązane problemy