Ich verwende Visual Studio 2010 im Debug-Modus und habe "Code optimieren" deaktiviert. Ich kann keine Variable im Debugger schnell beobachten (oder mit der Maus darüber fahren). Ich erhalte die Fehlermeldung "Ausdruck kann nicht ausgewertet werden, da der Code der aktuellen Methode optimiert ist".
Sogar eine Zeile wie: int i = -3, wenn ich i schnell beobachte, erhalte ich "Kann den Wert von local oder argument 'i' nicht erhalten, da er an diesem Befehlszeiger nicht verfügbar ist, möglicherweise weil er wegoptimiert wurde."
Dieser Link, auf den in einer ähnlichen Frage verwiesen wird, scheint nicht zuzutreffen.
Gibt es eine Einstellung, die mir fehlt?
c#
visual-studio
visual-studio-2010
Tony_Henrich
quelle
quelle
Antworten:
Während sich das Projekt im Debug-Modus befand, war dies nicht der Fall. Als ich es geändert habe, hat es funktioniert.
quelle
Ich hatte dieses Problem, als ich VS 2010 verwendete. Meine Lösungskonfiguration wurde (Debug) ausgewählt. Ich habe dieses Problem behoben, indem ich die Eigenschaft Code optimieren unter Projekteigenschaften deaktiviert habe. Projekt (Rechtsklick) => Eigenschaften => Erstellen (Registerkarte) => Deaktivieren Sie Code optimieren
quelle
Es hört sich so an, als würden Sie einen optimierten Build / Release-Build debuggen, obwohl das Kontrollkästchen "Optimiert" deaktiviert ist. Dinge, die Sie versuchen können, sind:
Wenn Sie den Menüpunkt Module im Menü Debug -> Windows nicht sehen können, müssen Sie ihn möglicherweise im Menü "Anpassen ..." hinzufügen.
quelle
Project.Web
hat Optimierung deaktiviert, aber es wird immer noch als optimiert angezeigt, wenn ich mir seine Montage inDebug > Modules
:(Gehen Sie in VS2013 zu: Extras -> Optionen -> Debugging -> Allgemein und aktivieren Sie 'Verwalteten Kompatibilitätsmodus verwenden'. Dies deaktiviert das neue Funktionsbewertungsverhalten.
quelle
Versuchen Sie, im Debug-Modus auszuführen. Wenn Sie im Release-Modus ausgeführt werden, wird diese Meldung angezeigt.
quelle
Meine Situation wurde durch keine der obigen Antworten abgedeckt. Ich habe Folgendes gefunden: MSDN-Artikel zum Thema Threading, in dem erklärt wird, dass der Debugger bei einigen primitiven nativen Threading-Vorgängen nicht auf die Daten zugreifen kann. Wenn beispielsweise ein Thread auf Task.Wait () sitzt, wird dies angezeigt.
quelle
Ich hatte das gleiche Problem. In meinem Fall wurde das
Debuggable
Attribut jedoch in derAssemblyInfo.cs
Datei meines Projekts fest codiert und daher nicht durch Kompilierung (über-) geschrieben. Es funktionierte, nachdem die Zeile entfernt wurde, in der dasDebuggable
Attribut angegeben war.quelle
Für mich passierte es in VS2017 und VS2019. Es hörte auf, nachdem ich die Option "Unterdrückte JIT-Optimierung beim Laden des Moduls" ausgewählt hatte.
quelle
Ich hatte das gleiche Problem in VS2008. In meinem Fall wurde es durch Lösungswiederherstellung gelöst.
quelle
Abgesehen von @Kragen erwähnt, wenn Sie ein Webprojekt debuggen
Schließen Sie das Visual Studio und versuchen Sie, die temporären Dateien unter C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporäre ASP.NET-Dateien zu löschen
quelle
Eine andere Möglichkeit besteht darin, eine Datei mit demselben Namen wie die optimierte DLL mit der Erweiterung ini zu erstellen und Folgendes hinzuzufügen:
[.NET Framework Debugging Control]
GenerateTrackingInfo = 1
AllowOptimize = 0
Dadurch wird die JIT angewiesen, Ihre Variablen nicht zu optimieren.
Beachten Sie, dass Sie die PDF-Datei weiterhin benötigen, sodass Sie am Ende Folgendes erhalten: yourDll.dll yourDll.pdb yourDll.ini
Dies funktioniert besonders gut in Szenarien, in denen Sie keinen Zugriff haben, um die DLLs mit der Debug-Option neu zu generieren.
http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx
quelle
Wenn nach dem Ausgeben einer Anweisung die Meldung " Ausdruck kann nicht ausgewertet werden, da der Code der aktuellen Methode optimiert ist "
Debugger.Break()
angezeigt wird, müssen Sie F10 drücken, um zur nächsten Anweisung zu gelangen.Sobald Sie mit der nächsten Anweisung fortgefahren sind und davon ausgehen, dass Sie einen Debug-Build ausführen, sollte diese Meldung verschwinden.
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
Ich hatte das gleiche Problem beim Debuggen einer Klassenbibliothek aus einer Testbed-Web-App. Ich habe auf die Release-Version im Testbed verwiesen und diese wurde so eingestellt, dass sie in den Eigenschaften der Klassenbibliothek optimiert wird.
Das Deaktivieren des Kontrollkästchens Code optimieren für die Release-Version in den Eigenschaften der Klassenbibliothek, während ich es schreibe, hat das Problem behoben.
quelle
Mir ist klar, dass dies eine spätere Antwort ist, aber ich habe einen weiteren Hinweis auf einen Weg gefunden, dieses Problem anzugehen, der anderen in Zukunft helfen könnte. Diese Webseite beschreibt das Festlegen einer Umgebungsvariablen (COMPLUS_ZapDisable = 1), die die Optimierung verhindert, zumindest für mich! (Vergessen Sie nicht den zweiten Teil des Deaktivierens des Visual Studio-Hosting-Prozesses.) In meinem Fall war dies möglicherweise noch relevanter, da ich eine externe DLL über einen Symbolserver debuggt habe, bin mir aber nicht sicher.
quelle
Ich hatte dieses Problem mit einem F # -Projekt, das hier und da zwischen Visual Studio und MonoDevelop war und möglicherweise aus letzterem stammte (ich vergesse). In VS war das Kontrollkästchen "Optimieren" deaktiviert, doch für den Debugger schien die Optimierung sicherlich zu erfolgen.
Nach dem Vergleich der XML-Datei der Projektdatei mit der einer fehlerfreien Datei war das Problem offensichtlich: Das fehlerfreie Projekt hatte eine explizite
<optimize>false</optimize>
Zeile, während das fehlerhafte Projekt diese vollständig fehlte. VS folgerte offensichtlich aus seiner Abwesenheit, dass die Optimierung deaktiviert war, während der Compiler das Gegenteil tat.Die Lösung bestand darin, diese Eigenschaft zur Projektdatei hinzuzufügen und neu zu laden.
quelle
Ich habe diese Nachricht erhalten, als ich zu Visual Studio 2017 migriert bin. Keine der Ideen auf dieser Seite, die ich ausprobiert habe, hat für mich funktioniert. In einem anderen Beitrag habe ich diesen Vorschlag gefunden und er hat funktioniert - entfernen:
... aus Ihrer AssemblyInfo-Datei.
quelle
Ich hatte das gleiche Problem in VS 2010. Die Lösung wurde bereinigt und neu erstellt, und es hat funktioniert.
quelle
Der Kommentar von vickramds oben bezieht sich auf http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html , hat es für mich getan. Ich habe alles überprüft - alle DLLs, PDF-Dateien aus lokalen Bin-Ordnern gelöscht, Clean, Rebuild, alle Ordner mit temporären ASP.NET-Dateien gelöscht, sichergestellt, dass TRACE / DEBUG-Flags gesetzt wurden, die DLL-Pfade überprüft usw.
So legen Sie es ab, damit es nicht verloren geht, für die betroffenen Projekte:
Projekteigenschaften -> Erstellen -> Erweitert -> Debug-Informationen: Vollständig.
Sie möchten überprüfen, ob Sie die Debug-Konfiguration ausgewählt haben, bevor Sie dies tun, es sei denn, Sie haben natürlich etwas anderes beabsichtigt.
quelle
Wenn Sie versuchen, ein ASP.NET-Projekt zu debuggen, stellen Sie sicher, dass die Dropdown-Liste Eigenschaften> Web> Server des Projekts auf "IIS Express" eingestellt ist (zusätzlich zur Überprüfung aller anderen hier).
quelle
Ich hatte gemischte c ++ / cli mfc-Erweiterungs-DLLs, die auch bei Debug-Konfiguration optimiert wurden (siehe Fenster VS 2017-Module). Wie in der vorherigen Antwort vorgeschlagen, habe ich Folgendes geändert: "Gehen Sie in VS2013 zu: Extras -> Optionen -> Debugging -> Allgemein und aktivieren Sie" Verwalteten Kompatibilitätsmodus verwenden ". Dadurch wird das neue Funktionsbewertungsverhalten deaktiviert." Diese Einstellungen finden Sie auch in VS 2017.
Da dies jedoch nicht ausreichte, habe ich auch die Einstellung UseDebugLibraries aus der Projektdatei einer anderen MFC-App in die DLL-Projektdatei der Erweiterung kopiert.
Dann neu erstellen und das Problem behoben.
quelle
In Visual Studio 2012 hat es für mich funktioniert , die Option " Verwaltet " unter Extras> Debuggen> Just-In-Time zu aktivieren .
quelle