Visual Studio 2010 zabija (nie ma innego słowa) dane w jednym z argumentów funkcji w niebezpiecznym bloku. Co może powodować ten błąd? Debugger pokazuje następujący komunikat.
Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away.
c#
visual-studio-2010
debugging
ciekawość
źródło
źródło
Cannot obtain value of local or argument '<this>' as it is not available at this instruction pointer, possibly because it has been optimized away. System.Threading.Tasks.TaskExceptionHolder
Odpowiedzi:
Przejdź do Właściwości projektu i w Buduj Upewnij się, że pole wyboru „Optymalizuj kod” nie jest zaznaczone.
Ustaw także opcję „Informacje debugowania” na „Pełny” w Opcjach zaawansowanych (na karcie Kompilacja).
źródło
Również w VS 2015 Community Edition
przejdź do Debuguj-> Opcje lub Narzędzia-> Opcje
i zaznacz Debugowanie-> Ogólne-> Pomiń optymalizację JIT przy ładowaniu modułu (tylko Zarządzane)
źródło
Jeśli skompilujesz z włączonymi optymalizacjami, wiele zmiennych zostanie usuniętych; na przykład:
tutaj zmienna lokalna
value
zazwyczaj byłaby usuwana, zamiast tego utrzymując wartość na stosie - trochę tak, jakbyś napisał:Ponadto, jeśli wartość zwracana w ogóle nie zostanie użyta , zostanie ona usunięta przez „pop” (zamiast przechowywana w lokalnym przez „stloc” i ponownie; lokalny nie będzie istniał).
Z tego powodu w takiej wersji debugger nie może uzyskać bieżącej wartości,
value
ponieważ nie istnieje - istnieje tylko przez krótką chwilę międzyGetValue()
aDoSomething(...)
.Więc; jeśli chcesz debugować ... nie używaj kompilacji wersji! lub przynajmniej wyłącz optymalizacje podczas debugowania.
źródło
http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html
To działało dla mnie w Visual Studio 2013.
Wszystko co musisz zrobić to..
źródło
Właśnie na to wpadłem i działałem w
Release
konfiguracji kompilacji zamiastDebug
konfiguracji kompilacji. Raz wróciłem doDebug
mojej zmiennej pokazanej ponownie w zegarku.źródło
W Visual Studio 2017 mam Debugowanie-> Opcja, a następnie zaznacz Debugowanie-> ogólne-> i zaznacz tę opcję
źródło
Kiedy napotkałem ten sam problem, musiałem po prostu wyczyścić moje rozwiązanie przed przebudową. To mnie załatwiło.
źródło
Jeśli chodzi o problem polegający na tym, że właściwość „Optimize code” jest UNCHECKED, a kod nadal kompiluje się jako zoptymalizowany: Ostatecznie pomógł mi po wypróbowaniu wszystkiego zaznaczenie pola wyboru „Enable niezarządzanego debugowania kodu” na tej samej stronie ustawień (Właściwości projektu - Debugowanie). Nie ma to 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
Enable unmanaged code debugging
. JestEnable native code debugging
, próbowałem sprawdzenia tego, ale to nie miało znaczenia.Napotkałem ten sam problem i rozwiązaniem dla mnie jest zmiana
Solution Configuration
zRelease
naDebug
. Mam nadzieję, że to pomożeźródło
W moim przypadku pracowałem nad projektem interfejsu API sieci Web i mimo że projekt został poprawnie ustawiony na pełne debugowanie, nadal widziałem ten błąd za każdym razem, gdy dołączałem do procesu IIS, który próbowałem debugować. Potem zdałem sobie sprawę, że profil publikowania został skonfigurowany do używania konfiguracji wydania. Więc jeszcze jedno miejsce do sprawdzenia to Twój profil publikowania, jeśli korzystasz z funkcji „Publikuj” w projekcie dotnet web api.
źródło
Odkryłem, że miałem ten sam problem, kiedy prowadziłem projekt i debugowałem, dołączając się do procesu IIS. Pracowałem również w trybie debugowania z wyłączonymi optymalizacjami. Podczas gdy myślałem, że kod dobrze się skompilował, kiedy odłączyłem się i próbowałem skompilować, jedno z odniesień nie zostało znalezione. Stało się tak za sprawą innego programisty, który dokonał modyfikacji i zmienił lokalizację odwołania. Odnośnik nie pojawił się z symbolem alertu, więc myślałem, że wszystko jest w porządku, dopóki nie skompilowałem. Po poprawieniu odniesienia i ponownym uruchomieniu zadziałało.
źródło
Jako dodatkowa odpowiedź dla osób, które doświadczają tego problemu podczas debugowania aplikacji internetowej witryn platformy Azure:
Na przykład podczas wdrażania z GitHub kod jest kompilowany na serwerze Azure zoptymalizowanym domyślnie.
Mówię serwerowi, aby skompilował się w debugowalny sposób, ustawiając
SCM_BUILD_ARGS
na/p:Configuration=Debug
ale jest więcej opcji. Zobacz: http://azure.microsoft.com/blog/2014/05/08/introduction-to-remote-debugging-on-azure-web-sites-part-3-multi-instance-environment-and-git /
źródło
W Visual Studio 2012:
Przejdź do właściwości projektu -> Debugowanie -> Odznacz „Włącz proces hostowania Visual Studio”
źródło
W przypadku aplikacji internetowych ważny jest inny problem, a mianowicie wybór prawidłowej konfiguracji podczas procesu publikowania aplikacji.
Możesz zbudować aplikację w trybie debugowania, ale może się zdarzyć, że opublikujesz ją w trybie wydania, który domyślnie komplikuje kod, ale IDE może Cię wprowadzić w błąd, ponieważ pokazuje tryb debugowania, gdy opublikowany kod jest w trybie wydania. Możesz zobaczyć szczegóły w poniższej migawce:
źródło
Sprawdź, czy masz plik Debuggable w pliku AssemblyInfo. Jeśli tak, usuń go i przebuduj rozwiązanie, aby sprawdzić, czy zmienne lokalne staną się dostępne.
Mój atrybut debuggowalny został ustawiony na: DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints, który zgodnie z tym artykułem MSDN mówi kompilatorowi JIT o korzystaniu z optymalizacji. Usunąłem tę linię z mojego pliku AssemblyInfo.cs i lokalne zmienne były dostępne.
źródło
W Visual Studio 2017 lub 2015:
Przejdź do rozwiązania Kliknij prawym przyciskiem myszy rozwiązanie, a następnie wybierz Właściwości-> wybierz wszystkie Konfiguracja-> Debuguj, a następnie kliknij OK. Po przebudowie i uruchomieniu to rozwiązanie zadziałało dla mnie.
źródło
Miałem ten sam problem. Wypróbowałem wszystkie powyższe i okazało się, że musiałem również usunąć wszystko z {PROJECT_ROOT} \ bin \ Release \ netcoreapp2.2 i {PROJECT_ROOT} \ obj \ Release \ netcoreapp2.2 dla mojego projektu. Jest to zdecydowanie związane z publikowaniem, ponieważ chociaż korzystam z narzędzi do wdrażania / bitbucket w mojej aplikacji sieci Web platformy Azure, próbowałem kompilacji >> Opublikuj >> Opublikuj na platformie Azure, ponieważ chciałem sprawdzić, które pliki zostały faktycznie wdrożone.
źródło
Miałem ten sam problem z aplikacją WPF i wszystkie rozwiązania tutaj NIE rozwiązały problemu . Problem polegał na tym, że moduł został już zoptymalizowany, więc następujące rozwiązania NIE DZIAŁA (lub nie są wystarczające do rozwiązania problemu):
Moduł jest nadal załadowany Zoptymalizowany. Zobacz następujący zrzut ekranu:
Aby rozwiązać ten problem , musisz usunąć zoptymalizowany moduł. Aby znaleźć zoptymalizowaną ścieżkę modułu, możesz użyć narzędzia takiego jak Process Hacker .
Kliknij dwukrotnie swój program w „ panelu procesów ”, a następnie w nowym oknie otwórz kartę „ .NET Assemblies ”. Następnie w kolumnie „ Ścieżka obrazu natywnego ” znajdują się wszystkie ścieżki zoptymalizowanych modułów . Znajdź ten, który chcesz zoptymalizować i usuń folder (patrz zrzut ekranu poniżej): (Z oczywistych powodów zatarłem nazwę mojej firmy)
Uruchom ponownie aplikację (z zaznaczonym polem wyboru w kroku 1) i powinno działać.
Uwaga : plik może być zablokowany, ponieważ został otwarty w innym procesie, spróbuj zamknąć program Visual Studio. Jeśli plik jest nadal zablokowany, możesz użyć programu takiego jak Lock Hunter
źródło