Używam programu Visual Studio 2010 w trybie debugowania i opcja „optymalizuj kod” jest odznaczona. Nie mogę szybko obserwować (lub najeżdżać) żadnej zmiennej w debugerze. Otrzymuję ten błąd „Nie można ocenić wyrażenia, ponieważ kod bieżącej metody jest zoptymalizowany”.
Nawet wiersz taki jak: int i = -3, wykonując szybki podgląd na i, otrzymuję komunikat „Nie można uzyskać wartości lokalnego lub argumentu 'i', ponieważ nie jest on dostępny w tym wskaźniku instrukcji, prawdopodobnie dlatego, że został zoptymalizowany”.
Wydaje się, że ten link, do którego odnosi się podobne pytanie, nie ma zastosowania.
Czy brakuje mi ustawienia?
c#
visual-studio
visual-studio-2010
Tony_Henrich
źródło
źródło
Odpowiedzi:
Gdy projekt był w trybie debugowania, rozwiązanie nie było. Kiedy to zmieniłem, zadziałało.
źródło
Miałem ten problem podczas korzystania z VS 2010. W mojej konfiguracji rozwiązania wybrano opcję (Debugowanie). Rozwiązałem to, odznaczając właściwość Optymalizuj kod we właściwościach projektu. Projekt (prawy przycisk myszy) => Właściwości => Kompiluj (zakładka) => odznacz Optymalizuj kod
źródło
Wygląda na to, że debugujesz wersję zoptymalizowaną / wydaną, mimo odznaczenia zoptymalizowanego pola. Możesz spróbować:
Jeśli nie widzisz elementu menu Moduły w menu Debuguj -> Windows, może być konieczne dodanie go w menu „Dostosuj ...”.
źródło
Project.Web
optymalizacja jest odznaczona, ale nadal jest wyświetlana jako zoptymalizowana, gdy patrzę na jej montaż wDebug > Modules
:(W VS2013 przejdź do: Narzędzia -> Opcje -> Debugowanie -> Ogólne i włącz opcję „Użyj zarządzanego trybu zgodności”. To wyłącza nowe zachowanie oceny funkcji.
źródło
Spróbuj uruchomić w trybie debugowania.Jeśli pracujesz w trybie wydania, pojawi się ten komunikat.
źródło
Moja sytuacja nie została uwzględniona w żadnej z powyższych odpowiedzi. Znalazłem: artykuł MSDN na temat wątków, w którym wyjaśniono, że debugger nie może uzyskać dostępu do danych, gdy utknie w niektórych prymitywnych natywnych operacjach wątkowania. Na przykład, gdy wątek znajduje się w Task.Wait (), pojawia się.
źródło
Miałem ten sam problem. Ale w moim przypadku
Debuggable
atrybut został zakodowany na stałe wAssemblyInfo.cs
pliku mojego projektu i dlatego nie został (nad-) zapisany przez kompilację. Zadziałało po usunięciu linii określającejDebuggable
atrybut.źródło
U mnie działo się to w VS2017 i VS2019. Przestało się to dziać po wybraniu opcji „Stłumiona optymalizacja JIT przy ładowaniu modułu”.
źródło
Miałem ten sam problem w VS2008. W moim przypadku został rozwiązany poprzez przebudowę rozwiązania.
źródło
Oprócz wspomnianego @Kragen, jeśli debugujesz projekt internetowy
zamknij program Visual Studio i spróbuj usunąć pliki tymczasowe w C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files
źródło
Inną rzeczą, którą możesz zrobić, jest utworzenie pliku o tej samej nazwie co dll, który jest zoptymalizowany, ale z rozszerzeniem ini, i dodanie do niego:
[Kontrola debugowania .NET Framework]
GenerateTrackingInfo = 1
AllowOptimize = 0
To powie zespołowi JIT, aby nie optymalizował zmiennych.
Pamiętaj, że nadal potrzebujesz pdb, więc otrzymasz coś takiego: yourDll.dll yourDll.pdb yourDll.ini
Działa to szczególnie dobrze w scenariuszach, w których nie masz dostępu do ponownego generowania bibliotek dll z opcją debugowania.
http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx
źródło
Gdy zobaczysz komunikat „ Nie można ocenić wyrażenia, ponieważ kod bieżącej metody jest zoptymalizowany. ” Po wydaniu
Debugger.Break()
instrukcji, upewnij się, że naciskasz klawisz F10, aby przejść do następnej instrukcji.Po przejściu do następnej instrukcji i przy założeniu, że korzystasz z kompilacji debugowania, ten komunikat powinien zniknąć.
źródło
Odnośnie problemu z NIEZADANIOWANĄ właściwością „Optymalizuj kod”, ale kod nadal kompiluje się jako zoptymalizowany: Ostatecznie pomogło mi po wypróbowaniu wszystkiego zaznaczenie pola wyboru „Włącz debugowanie kodu niezarządzanego” na tej samej stronie ustawień (Właściwości projektu - Debugowanie). Nie ma bezpośredniego związku z optymalizacją kodu, ale po włączeniu tej opcji VS nie optymalizuje już mojej biblioteki i mogę debugować.
źródło
Miałem ten sam problem podczas debugowania biblioteki klas z aplikacji internetowej na stanowisku testowym. Odwoływałem się do wersji wydania w stanowisku testowym i została ustawiona na optymalizację we właściwościach biblioteki klas.
Usunięcie zaznaczenia pola wyboru optymalizacji kodu dla wersji wydania we właściwościach biblioteki klas właśnie podczas jej pisania rozwiązało problem.
źródło
Zdaję sobie sprawę, że jest to późniejsza odpowiedź, ale znalazłem inne odniesienie do sposobu rozwiązania tego problemu, który może pomóc innym w przyszłości. Ta strona internetowa opisuje ustawienie zmiennej środowiskowej (COMPLUS_ZapDisable = 1), która zapobiega optymalizacji, przynajmniej tak było w moim przypadku! (Nie zapomnij o drugiej części wyłączania procesu hostingu programu Visual Studio). W moim przypadku mogło to być jeszcze bardziej istotne, ponieważ debugowałem zewnętrzną bibliotekę DLL za pośrednictwem serwera symboli, ale nie jestem pewien.
źródło
Miałem ten problem z projektem F #, który był tu i ówdzie między Visual Studio i MonoDevelop, być może pochodzącym z tego ostatniego (zapomniałem). W VS pole optymalizacji nie było zaznaczone, ale optymalizacja z pewnością zdawała się zachodzić, jeśli chodzi o debugger.
Po porównaniu XML pliku projektu ze zdrowym, problem był oczywisty: zdrowy projekt miał wyraźną
<optimize>false</optimize>
linię, podczas gdy zły całkowicie go brakowało. VS najwyraźniej wywnioskował z jego braku, że optymalizacja została wyłączona, podczas gdy kompilator postępował odwrotnie.Rozwiązaniem było dodanie tej właściwości do pliku projektu i ponowne wczytanie.
źródło
Zacząłem otrzymywać tę wiadomość po migracji do programu Visual Studio 2017. Żaden z pomysłów na tej stronie, które wypróbowałem, nie zadziałał dla mnie. W innym poście znalazłem tę sugestię i DZIAŁAŁO - usuń:
... z pliku AssemblyInfo.
źródło
Miałem ten sam problem w VS 2010. Oczyszczono i odbudowałem rozwiązanie i zadziałało.
źródło
Komentarz vickramds powyżej, odnoszący się do http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html , zrobił to za mnie. Sprawdziłem wszystko - usunąłem wszystkie pliki dll, pdb z lokalnych folderów bin, wyczyść, odbuduj, wyczyściłem wszystkie foldery tymczasowych plików ASP.NET, upewniłem się, że zostały ustawione flagi TRACE / DEBUG, sprawdziłem ścieżki DLL itp.
Aby go odłożyć, aby nie został utracony, dla projektów, których dotyczy problem:
Właściwości projektu -> Kompilacja -> Zaawansowane -> Informacje o debugowaniu: pełne.
Chcesz sprawdzić, czy masz wybraną konfigurację debugowania, zanim to zrobisz, chyba że oczywiście zamierzałeś inaczej.
źródło
Jeśli próbujesz debugować projekt ASP.NET, upewnij się, że lista rozwijana Właściwości> Sieć> Serwery projektu jest ustawiona na „IIS Express” (oprócz sprawdzania wszystkiego innego tutaj).
źródło
Miałem mieszane biblioteki dll rozszerzeń mfc c ++ / cli, które zostały zoptymalizowane, nawet jeśli konfiguracja debugowania (widok z okna modułów VS 2017). Jak sugerowała poprzednia odpowiedź, zmieniłem „W VS2013 przejdź do: Narzędzia -> Opcje -> Debugowanie -> Ogólne i włącz„ Użyj zarządzanego trybu zgodności ”. Spowoduje to wyłączenie nowego zachowania oceny funkcji”. Te ustawienia można znaleźć również w VS 2017.
Ale to nie wystarczyło, więc skopiowałem również ustawienie UseDebugLibraries z pliku projektu innej aplikacji MFC do pliku projektu rozszerzenia dll.
Następnie odbuduj i to rozwiązało problem.
źródło
W programie Visual Studio 2012 włączenie opcji „ Zarządzane ” w menu Narzędzia> Debugowanie> Just-In-Time działało dla mnie.
źródło