it-swarm.com.de

Der Wert local oder arg kann nicht abgerufen werden, da er an diesem Befehlszeiger nicht verfügbar ist, möglicherweise weil er wegoptimiert wurde

Visual Studio 2010 tötet (es gibt kein anderes Word) Daten in einem der Funktionsargumente in unsicherem Block .. Was kann 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.
149
curiousity

Gehen Sie zu Projekteigenschaften und stellen Sie unter Erstellen sicher, dass das Kontrollkästchen "Code optimieren" nicht markiert ist. 

Setzen Sie auch die Dropdown-Liste "Debug-Informationen" in den Erweiterten Optionen (Registerkarte "Erstellen") auf "Voll".

243
Karthik

AlsoIn VS 2015 Community Edition

gehen Sie zu Debug-> Optionen oder Tools-> Optionen

und prüfen Debugging-> General-> JIT-Optimierung beim Laden des Moduls unterdrücken (nur Verwaltet) 

86
xyq.384.b

Wenn Sie mit aktivierten Optimierungen kompilieren, werden viele Variablen entfernt. zum Beispiel:

SomeType value = GetValue();
DoSomething(value);

hier würde normalerweise die lokale Variable value entfernt, wobei der Wert stattdessen auf dem Stapel verbleibt - ein bisschen, als ob Sie geschrieben hätten:

DoSomething(GetValue());

Wenn ein Rückgabewert überhaupt nicht verwendet wird, wird er über "pop" abgelegt (anstatt in einem lokalen über "stloc" gespeichert zu werden; das lokale wird nicht existieren).

Aus diesem Grund kann der Debugger in einem solchen Build nicht den aktuellen Wert von value erhalten, da es nicht existiert - er nur für den kurzen Moment zwischen GetValue() und DoSomething(...) existiert.

So; Wenn Sie debuggen möchten ... verwenden Sie keinen Release-Build! Deaktivieren Sie zumindest Optimierungen während des Debuggens.

57
Marc Gravell

http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html

Das hat für mich in Visual Studio 2013 funktioniert.

Alles was du tun musst, ist..

  1. Klicken Sie mit der rechten Maustaste auf das Projekt, das Sie nicht debuggen können.
  2. Gehe auf Proportionen projizieren.
  3. Klicken Sie auf das Build-Menü.
  4. Klicken Sie auf die Schaltfläche "Erweitert".
  5. Setzen Sie den Dropdown-Wert für Debug-Informationen auf voll.
  6. Erstellen Sie Ihr Projekt neu. 

Ich bin gerade auf dieses Thema gestoßen und habe unter Release build configuration statt Debug build configuration ausgeführt. Sobald ich wieder auf Debug umgestellt hatte, wurde meine Variable wieder in der Uhr angezeigt.

16

Als ich mit dem gleichen Problem konfrontiert wurde, musste ich vor dem Wiederaufbau meine Lösung reinigen. Das hat für mich gesorgt.

7
CJe

In Bezug auf das Problem, dass die Eigenschaft "Code optimieren" nicht überprüft wurde, wurde der Code dennoch als optimiert kompiliert: Was nach dem Versuch alles half, war das Markieren des Kontrollkästchens "Nicht verwalteten Code-Debugging aktivieren" auf derselben Einstellungsseite (Projekteigenschaften - Debug). Es bezieht sich nicht direkt auf die Codeoptimierung, aber wenn diese Option aktiviert ist, optimiert VS meine Bibliothek nicht mehr und ich kann debuggen.

6
Miloš

Ich habe das gleiche Problem und die Lösung für mich ist Solution Configuration von Release zu Debug. Ich hoffe es hilft 

5
Hoang Tran

Ich habe festgestellt, dass ich das gleiche Problem hatte, als ich ein Projekt ausführte und das Debugging durch Anhängen an einen IIS -Prozess durchführte. Ich war auch im Debug-Modus mit deaktivierten Optimierungen. Während ich dachte, der Code sei gut kompiliert worden, als ich losgelöst und versucht habe zu kompilieren, wurde eine der Referenzen nicht gefunden. Dies war auf einen anderen Entwickler zurückzuführen, der hier Änderungen vorgenommen und den Ort der Referenz geändert hat. Die Referenz wurde nicht mit dem Alarmsymbol angezeigt, daher dachte ich, dass alles in Ordnung war, bis ich die Zusammenstellung durchführte. Sobald die Referenz repariert und wieder ausgeführt wurde, hat es funktioniert.

3
Derreck Dean

Aktivieren Sie in Visual Studio 2017 Goto Debug-> Option dann Debugging-> general -> Und aktivieren Sie diese Option

 relevant Visual Studio 2017 Options

2
Zahid Hasan

In meinem Fall arbeitete ich an einem Web-API-Projekt, und obwohl das Projekt korrekt auf "Vollständiges Debuggen" eingestellt war, wurde dieser Fehler immer noch angezeigt, wenn ich an den Prozess IIS gehe, den ich zu debuggen versuchte. Dann wurde mir klar, dass das Veröffentlichungsprofil auf die Release-Konfiguration eingestellt war. Ein weiterer Ort, den Sie überprüfen können, ist Ihr Veröffentlichungsprofil, wenn Sie die Funktion "Veröffentlichen" Ihres Dotnet-Web-API-Projekts verwenden.

2
user8683595

Als zusätzliche Antwort für Benutzer, die dieses Problem beim Debuggen der Web-App einer Azure-Website haben:

Bei der Bereitstellung von GitHub zum Beispiel wird der Code standardmäßig im Azure-Server optimiert kompiliert.

Ich sage dem Server, dass er auf debuggbare Weise kompilieren soll, indem ich SCM_BUILD_ARGS auf /p:Configuration=Debug setze

aber es gibt mehr möglichkeiten. Siehe hierzu: http://Azure.Microsoft.com/blog/2014/05/08/einführung-zu-ferner-debugging-on-Azure-web-sites-part-3-multi-instance- umwelt-und-git/

1
iberodev

Ich hatte das gleiche Problem. Ich habe alles ausprobiert 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 ist definitiv auf das Veröffentlichen beschränkt, da ich zwar in meiner Azure-Webanwendung Bereitstellungstools/Bitbucket verwende, jedoch den Befehl Erstellen >> Veröffentlichen >> Veröffentlichen in Azure ausprobierte, weil ich die tatsächlich bereitgestellten Dateien untersuchen wollte.

0
ozzy432836

In Visual Studio 2012:

Gehen Sie zu den Projekteigenschaften -> Debuggen -> Deaktivieren Sie "Aktivieren des Visual Studio-Hosting-Prozesses".

0
Milana

In Visual Studio 2017 oder 2015:

Gehen Sie zur Lösung, klicken Sie mit der rechten Maustaste auf Lösung, und wählen Sie Eigenschaften -> Wählen Sie alle Einstellungen -> Debug aus, und klicken Sie auf OK. Nach dem erneuten Erstellen und Ausführen funktionierte diese Lösung für mich. 

0
Kalyan

Überprüfen Sie, ob in Ihrer AssemblyInfo-Datei ein Debugable-Attribut vorhanden ist. Wenn ja, entfernen Sie es und erstellen Sie Ihre Lösung neu, um festzustellen, ob die lokalen Variablen verfügbar werden. 

Mein debuggable-Attribut wurde auf Folgendes gesetzt: DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints, das laut diesem MSDN-Artikel dem JIT-Compiler die Verwendung von Optimierungen anfordert. Ich habe diese Zeile aus meiner AssemblyInfo.cs-Datei entfernt und die lokalen Variablen waren verfügbar. 

0
Nick