Visual Studio 2010 beendet Daten in einem der Argumente der Funktion im unsicheren Block (es gibt kein anderes Wort). Was könnte diesen Fehler verursachen? Die folgende Meldung wird vom Debugger angezeigt.
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
Neugier
quelle
quelle
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
Antworten:
Gehen Sie zu Projekteigenschaften und stellen Sie unter Erstellen sicher, dass das Kontrollkästchen "Code optimieren" deaktiviert ist.
Setzen Sie außerdem die Dropdown-Liste "Debug Info" in den erweiterten Optionen (unter der Registerkarte "Erstellen") auf "Vollständig".
quelle
Auch in der VS 2015 Community Edition
Gehen Sie zu Debug-> Optionen oder Extras-> Optionen
und aktivieren Sie Debugging-> Allgemein-> JIT-Optimierung beim Laden des Moduls unterdrücken (nur verwaltet).
quelle
Wenn Sie mit aktivierten Optimierungen kompilieren, werden viele Variablen entfernt. beispielsweise:
Hier wird die lokale Variable
value
normalerweise entfernt, wobei der Wert stattdessen auf dem Stapel bleibt - ein bisschen so, als hätten Sie geschrieben:Wenn ein Rückgabewert überhaupt nicht verwendet wird, wird er über "pop" gelöscht (anstatt über "stloc" in einem lokalen gespeichert, und der lokale Wert ist nicht vorhanden).
Aus diesem Grund kann der Debugger in einem solchen Build nicht den aktuellen Wert von erhalten,
value
da er nicht vorhanden ist - er existiert nur für den kurzen Moment zwischenGetValue()
undDoSomething(...)
.So; Wenn Sie debuggen möchten, verwenden Sie keinen Release-Build! oder deaktivieren Sie zumindest Optimierungen, während Sie debuggen.
quelle
http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html
Das hat bei mir im Visual Studio 2013 funktioniert.
Alles was du tun musst, ist..
quelle
Ich bin gerade darauf gestoßen und habe unter
Release
Build-Konfiguration stattDebug
Build-Konfiguration ausgeführt. Einmal wechselte ich wieder zuDebug
meiner Variablen, die wieder in der Uhr angezeigt wurde.quelle
Gehen Sie in Visual Studio 2017 zu Debug-> Option, aktivieren Sie dann Debugging-> Allgemein-> und aktivieren Sie diese Option
quelle
Als ich mit dem gleichen Problem konfrontiert war, musste ich nur meine Lösung reinigen, bevor ich sie neu aufbaute. Das hat sich für mich erledigt.
quelle
In Bezug auf das Problem, dass die Eigenschaft "Code optimieren" nicht überprüft wurde und der Code dennoch als optimiert kompiliert wurde: Was mir schließlich geholfen hat, nachdem ich alles versucht hatte, war das Kontrollkästchen "Debuggen von nicht verwaltetem Code aktivieren" auf derselben Einstellungsseite (Projekteigenschaften - Debuggen). Es bezieht sich nicht direkt auf die Codeoptimierung, aber wenn diese Option aktiviert ist, optimiert VS meine Bibliothek nicht mehr und ich kann debuggen.
quelle
Enable unmanaged code debugging
. Es gibtEnable native code debugging
, habe ich versucht diese Überprüfung aber es machte keinen Unterschied.Ich habe das gleiche Problem und die Lösung für mich ist der Wechsel
Solution Configuration
vonRelease
zuDebug
. Ich hoffe es hilftquelle
In meinem Fall arbeitete ich an einem Web-API-Projekt, und obwohl das Projekt korrekt auf vollständiges Debugging eingestellt war, wurde dieser Fehler jedes Mal angezeigt, wenn ich an den IIS-Prozess anhängte, den ich zu debuggen versuchte. Dann wurde mir klar, dass das Veröffentlichungsprofil so eingestellt war, dass es die Release-Konfiguration verwendet. Ein weiterer zu überprüfender Ort ist Ihr Veröffentlichungsprofil, wenn Sie die Funktion "Veröffentlichen" Ihres dotnet-Web-API-Projekts verwenden.
quelle
Ich stellte fest, dass ich das gleiche Problem hatte, als ich ein Projekt ausführte und das Debuggen durch Anhängen an einen IIS-Prozess durchführte. Ich lief auch im Debug-Modus mit deaktivierten Optimierungen. Während ich dachte, der Code sei gut kompiliert, wurde beim Trennen und Kompilieren eine der Referenzen nicht gefunden. Dies war auf einen anderen Entwickler zurückzuführen, der Änderungen vorgenommen und den Speicherort der Referenz geändert hat. Die Referenz wurde nicht mit dem Warnsymbol angezeigt, daher dachte ich, dass alles in Ordnung war, bis ich die Kompilierung durchgeführt habe. Nachdem die Referenz repariert und erneut ausgeführt wurde, funktionierte sie.
quelle
Als zusätzliche Antwort für diejenigen, bei denen dieses Problem beim Debuggen der Web-App einer Azure-Website auftritt:
Bei der Bereitstellung von GitHub wird der Code beispielsweise in Azure Server optimiert kompiliert standardmäßig .
Ich sage dem Server in einer debug Art und Weise zu erstellen , indem Sie
SCM_BUILD_ARGS
auf/p:Configuration=Debug
Es gibt jedoch noch mehr Optionen. Siehe dies: http://azure.microsoft.com/blog/2014/05/08/introduction-to-remote-debugging-on-azure-web-sites-part-3-multi-instance-environment-and-git /.
quelle
In Visual Studio 2012:
Gehen Sie zu den Projekteigenschaften -> Debuggen -> Deaktivieren Sie "Visual Studio-Hosting-Prozess aktivieren".
quelle
Für Webanwendungen gibt es ein weiteres Problem, das wichtig ist und die Auswahl der richtigen Konfiguration während des Veröffentlichungsprozesses der Anwendung.
Sie können Ihre App im Debug-Modus erstellen, aber es kann vorkommen, dass Sie sie im Release-Modus veröffentlichen, der standardmäßig den Code omptimiert. IDE kann Sie jedoch irreführen, da der Debug-Modus angezeigt wird, während sich der veröffentlichte Code im Release-Modus befindet. Sie können Details im folgenden Schnappschuss sehen:
quelle
Überprüfen Sie, ob Ihre AssemblyInfo-Datei ein Debuggable-Attribut enthält. Wenn dies der Fall ist, entfernen Sie es und erstellen Sie Ihre Lösung neu, um festzustellen, ob die lokalen Variablen verfügbar sind.
Mein debuggable-Attribut wurde auf DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints festgelegt, das gemäß diesem MSDN-Artikel den JIT-Compiler anweist , Optimierungen zu verwenden. Ich habe diese Zeile aus meiner AssemblyInfo.cs-Datei entfernt und die lokalen Variablen waren verfügbar.
quelle
In Visual Studio 2017 oder 2015:
Gehen Sie zur Lösung, klicken Sie mit der rechten Maustaste auf Lösung, wählen Sie Eigenschaften-> Alle Konfigurationen auswählen-> Debuggen und klicken Sie dann auf OK. Nach diesem Rebuild and Run funktionierte diese Lösung für mich.
quelle
Ich hatte das gleiche Problem. Ich habe alles versucht und festgestellt, dass ich auch alles in {PROJECT_ROOT} \ bin \ Release \ netcoreapp2.2 und {PROJECT_ROOT} \ obj \ Release \ netcoreapp2.2 für mein Projekt löschen musste. Es wird definitiv für die Veröffentlichung freigegeben, da ich, obwohl ich in meiner Azure-Webanwendung Bereitstellungstools / Bitbucket verwende, Build >> Veröffentlichen >> In Azure veröffentlichen versucht habe, weil ich überprüfen wollte, welche Dateien tatsächlich bereitgestellt wurden.
quelle
Hatte das gleiche Problem zuvor mit einer WPF-Anwendung und alle Lösungen hier haben das Problem NICHT gelöst . Das Problem war, dass das Modul bereits optimiert wurde, sodass die folgenden Lösungen NICHT FUNKTIONIEREN (oder nicht ausreichen, um das Problem zu lösen):
Das Modul ist noch geladen Optimiert. Siehe folgenden Screenshot:
Um dieses Problem zu lösen, müssen Sie das optimierte Modul löschen. Um den optimierten Modulpfad zu finden, können Sie ein Tool wie Process Hacker verwenden .
Doppelklicken Sie im " Prozessfenster " auf Ihr Programm und öffnen Sie im neuen Fenster die Registerkarte " .NET Assemblies ". In der Spalte " Native Image Path " finden Sie dann alle optimierten Modulpfade . Suchen Sie den Ordner, den Sie deoptimieren möchten, und löschen Sie den Ordner (siehe Abbildung unten): (Ich habe meinen Firmennamen aus offensichtlichen Gründen verwischt.)
Starten Sie Ihre Anwendung neu (mit korrekt aktiviertem Kontrollkästchen in Schritt 1) und es sollte funktionieren.
Hinweis : Die Datei ist möglicherweise gesperrt, da sie von einem anderen Prozess geöffnet wurde. Schließen Sie Visual Studio. Wenn die Datei noch gesperrt ist, können Sie ein Programm wie Lock Hunter verwenden
quelle