Visual Studio 2010'da "Geçerli yöntemin kodu optimize edildiğinden ifade değerlendirilemiyor"


153

Visual Studio 2010 hata ayıklama modunda kullanıyorum ve "optimize kodu" işaretli değil. Hata ayıklayıcıdaki herhangi bir değişkeni hızlı izleyemiyorum (veya üzerine gelemiyorum). Bu hatayı alıyorum "Geçerli yöntemin kodu optimize edildiğinden ifade değerlendirilemiyor".

İnt i = -3 gibi bir çizgi bile, i üzerinde hızlı bir izleme yaparak, "Yerel olarak veya 'i' argümanının değerini elde edemiyorum, çünkü bu talimat göstergesinde mevcut değil, çünkü muhtemelen optimize edildi."

Benzer bir soruda referans verilen bu bağlantı geçerli görünmüyor.

Kaçırdığım bir ayar var mı?


4
torulflundgren.blogspot.com.au/2010/03/… Bunun için bulduğum en iyi çözüm bu. Bunu 2013 görsel stüdyosunda test ettim.
Çalıştım

Yanıtlar:


167

Proje hata ayıklama modundayken çözüm değildi. Değiştirdiğimde işe yaradı.


9
VS2012'de bu sorunu yaşadım, ancak çözüm ve tüm projeler hiçbir optimizasyon olmadan Debug olarak ayarlandı. Çözümü temizledim / yeniden inşa ettim benim için.
saarp

20
Peki ... Çözümü hata ayıklama olmayan moda nasıl ayarlarsınız?
user1431072

user1431072 - çözümünüzü veya projenizi sağ tıklayın ve mülk seçin, sonra hata ayıklama modu olarak ayarlayabilirsiniz
Yevgraf Andreyevich Zhivago

48

VS 2010 kullanırken bu sorunu yaşadım. Çözüm yapılandırmam (Hata Ayıklama) seçildi. Bu proje özellikleri altında Kod Optimize özelliği işaretini kaldırarak çözüldü. Proje (sağ Tıklama) => Özellikler => Derleme (sekme) => Kodu optimize et seçeneğinin işaretini kaldırın


29

Optimize edilmiş kutunun işaretlenmemiş olmasına rağmen, optimize edilmiş / serbest bırakılan bir sürümde hata ayıkladığınız anlaşılıyor. Deneyebileceğiniz şeyler:

  • Çözüm dosyanızı tam olarak yeniden oluşturun (çözümü sağ tıklayın ve Tümünü yeniden oluştur'u seçin)
  • Hata ayıklama sırasında modüller penceresini açın (Hata Ayıkla -> Windows -> Modüller) ve montajınızı yüklü modüller listesinde bulun. Yüklü derlemenize karşı listelenen yolun olmasını beklediğiniz yol olduğunu ve dosyanın değiştirilmiş zaman damgasının derlemenin gerçekten yeniden oluşturulduğunu gösterdiğini denetleyin.
  • Modüller penceresi ayrıca yüklenen modülün optimize edilip edilmediğini size bildirmelidir - modüller penceresinin optimize edilmediğini gösterdiğinden emin olun.

Hata ayıkla -> Windows menüsünde Modüller menü öğesini göremiyorsanız, "Özelleştir ..." menüsüne eklemeniz gerekebilir.


2
Çözelti yeniden inşa edildi. Modüller penceresi montajın optimize edildiğini gösterir. En iyi duruma getirme onay kutusunun işareti kaldırıldı, bu yüzden montajın neden her zaman optimize edildiğini bilmiyorum. Çözüm bir web projesi var ama bakıyorum kod hata ayıklama modunda bir sınıf kitaplığı projesinde.
Tony_Henrich

@Tony - Aptalca bir soru, ancak sınıf kitaplığında "Optimize edilmiş" onay kutusu seçili mi?
Justin

Evet. Sorumdan bu gerçekten bahsettim. Kendi sorumu zaten cevapladım.
Tony_Henrich

1
Benim Project.WebOptimizasyon unicked henüz henüz onun montaj bakıldığında Optimize edilmiş olarak gösterir Debug > Modules:(
J86

VS'yi hata ayıklama bilgilerini güncellemeye zorlamak için bulduğum tek yol, seçeneğin denetlenmediği halde hala optimize edilmiş olarak kabul edilen modülün montaj sürümünü artırmaktı.
alphanoch

14

VS2013'te şuraya gidin: Araçlar -> Seçenekler -> Hata ayıklama -> Genel ve 'Yönetilen uyumluluk modunu kullan' seçeneğini etkinleştirin. Bu, yeni işlev değerlendirme davranışını devre dışı bırakır.


Teşekkürler! Sunulan diğer çözümlerden, benim için önemli olan buydu. Garip bir şey oldu, aniden değişti, merak ediyorum ne değişti.
squid808

10

Hata ayıklama modunda çalıştırmayı deneyin. Serbest bırakma modunda çalışıyorsanız bu mesajı alırsınız.


5
Soru, gün gibi basit bir şekilde, "Visual Studio 2010'u hata ayıklama modunda kullanıyorum ve" kodu optimize et "seçeneğinin işaretini kaldırdım." ... bu cevabı silmemeniz gerekir.
Jim Balter

Ciddi anlamda. Hata ayıklamada çalıştığı sorusunda bunu söylüyor. Neden vekiller anlamıyorum. Bu cevap olası kararları
John Demetriou

1
FWIW, bu hata mesajını aradığınızda bu soru Google'da yüksek sırada yer alıyor. Bu cevap benim için doğruydu (serbest bırakma modunda olduğumu fark etmedim).
Nate Barbettini

Birden fazla montajı olabilir ve yapılandırma yöneticisinde hata ayıkladığı montaj, serbest bırakma veya sth olarak ayarlanabilir.
madoxdev

8

Durumum yukarıdaki cevapların hiçbiri tarafından ele alınmadı. Aşağıdakileri buldum: Bazı ilkel yerel iş parçacığı işlemlerinde sıkıştığında, hata ayıklayıcı verilere erişemediğini açıklayan iş parçacığı üzerinde MSDN makalesi . Örnek olarak, bir iş parçacığı Task.Wait () üzerinde oturduğunda, bu ortaya çıkar.


8

Ben de aynı problemi yaşadım. Ama benim durumumda, Debuggableöznitelik projemin AssemblyInfo.csdosyasında sabit kodlanmıştı ve bu nedenle derleme ile yazılmadı. DebuggableÖzelliği belirten satırı kaldırdıktan sonra çalıştı .


8

Benim için VS2017 ve VS2019'da oluyordu. "Modül yükünde bastırılmış JIT optimizasyonu" seçeneğini seçtikten sonra gerçekleşmedi.

resim açıklamasını buraya girin


+1, sorunumun nedeni buydu. Yapılandırma "Hata Ayıkla" ile sona erdiğinde XML optimize optimize var VS VS aslında csproj seçenekleri anlamak çok iyi görünmüyor. MSBuild'i doğrudan çağırırken iyi çalışıyor, ancak VS'nin kendisinde pek doğru değil.
TheBeardedQuack

5

VS2008'de de aynı sorunu yaşadım. Benim durumumda çözüm yeniden oluşturma yoluyla çözüldü.


4

@Kragen dışında, bir web projesinde hata ayıklama yapıyorsanız

Visual Studio'yu kapatın ve C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files'daki geçici dosyaları silmeyi deneyin.


Çözüm bir web projesi var ama kod sınıf kitaplığı projesinde. Geçici dosyaları defalarca sildim.
Tony_Henrich

4

Yapabileceğiniz başka bir şey, optimize edilen dll ile aynı ada sahip ancak ini uzantısıyla bir dosya oluşturmak ve buna aşağıdakileri eklemek:

[.NET Framework Hata Ayıklama Denetimi]
GenerateTrackingInfo = 1
AllowOptimize = 0

Bu, JIT'e değişkenlerinizi optimize etmemesini söyleyecektir.

Hala pdb'ye ihtiyacınız olduğunu unutmayın, bu yüzden böyle bir şeyle sonuçlanacaksınız: yourDll.dll yourDll.pdb yourDll.ini

Hata ayıklama seçeneğiyle dll'leri yeniden oluşturma erişiminiz olmadığında, bu özellikle senaryolarda iyi çalışır.

http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx


4

Bir ifade verdikten sonra " Geçerli yöntemin kodu optimize edildiğinden" İfade değerlendirilemiyor "iletisini Debugger.Break()gördüğünüzde, lütfen sonraki ifadeye geçmek için F10 tuşuna bastığınızdan emin olun.

Bir sonraki ifadeye geçtikten ve bir Hata Ayıklama derlemesi çalıştırdığınızı varsayarsak, bu iletinin kaybolması gerekir.


2
Öyleydi. Yukarıdaki tüm çözümleri denedim ve bu küçük şey işe yaradı ..
Paylaştığınız

Nop. İşe yaramadı. Vs17 hala bir sürüm derlemesinde hata ayıkladığımı düşünüyor
John Demetriou

3

"Kodu optimize et" özelliğinin henüz KONTROL EDİLMEMİŞ sorunuyla ilgili olarak kod hala optimize edilmiş olarak derleniyor: Sonunda her şeyi denedikten sonra bana yardımcı olan şey, aynı ayarlar sayfasındaki (Proje özellikleri - Hata Ayıklama) "Yönetilmeyen kod hata ayıklamasını etkinleştir" onay kutusunu işaretlemektir. Doğrudan kod optimizasyonu ile ilgili değildir, ancak bu etkinleştirildiğinde VS artık kütüphanemi optimize etmez ve hata ayıklayabilirim.


3

Testbed web uygulamasından bir sınıf kütüphanesinde hata ayıklarken aynı sorunu yaşadım. Ben testbed yayın sürümü başvuruyordu ve bu sınıf kitaplığı özelliklerinde optimize edilmiş olarak ayarlanmış.

Sadece yazarken, sınıf kitaplığı özelliklerinde yayın sürümü için optimize kod onay kutusunun işaretini kaldırmak sorunu çözdü.


Teşekkürler. Bu onay kutusunu, her projeye sağ tıklayıp "Özellikler" menü seçeneğini, ardından "Oluştur" sekmesini seçerek bulabilirsiniz.
goamn

3

Bunun daha sonraki bir cevap olduğunu anlıyorum, ancak ileride başkalarına yardımcı olabilecek bu sorunu ele almanın bir yoluna başka bir referans buldum. Bu web sayfası , optimizasyonu önleyen bir ortam değişkeni (COMPLUS_ZapDisable = 1) ayarlamayı açıklar, en azından benim için yaptı! (Visual Studio barındırma işlemini devre dışı bırakmanın ikinci bölümünü unutmayın.) Benim durumumda, bir sembol sunucusu aracılığıyla harici bir DLL hata ayıklama çünkü bu daha da alakalı olabilir, ama emin değilim.


3

Visual Studio ve MonoDevelop arasında burada ve orada olan bir F # projesi ile bu sorunu yaşadım, belki de ikincisinden kaynaklandım (unuttum). VS'de, optimizasyon kutusu işaretlenmedi, ancak hata ayıklayıcıyla ilgili olarak optimizasyon kesinlikle gerçekleşiyor gibiydi.

Proje dosyasının XML'sini sağlıklı bir dosyayla karşılaştırdıktan sonra sorun açıktı: Sağlıklı projenin açık bir <optimize>false</optimize>çizgisi vardı , kötü olanı ise tamamen eksikti. VS, derleyici tam tersini yaparken optimizasyonun devre dışı bırakılmadığından açıkça çıkıyordu.

Çözüm, bu özelliği proje dosyasına eklemek ve yeniden yüklemekti.


1

Bu iletiyi Visual Studio 2017'ye taşındığımda almaya başladım. Bu sayfada denediğim hiçbir fikir benim için çalışmadı. Başka bir gönderide bu öneriyi buldum ve iş DID - kaldır:

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]

... AssemblyInfo dosyanızdan.


Seni seviyorum @Crazy Cat. VS2019'a göç ettiğimde başıma geldi.
Antonio Rodríguez

0

VS 2010'da aynı sorunu yaşadım. Temizlendi ve çözümü yeniden oluşturduk ve işe yaradı.


0

vickramds'ın yukarıdaki yorumu, http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html , benim için yaptı. Her şeyi kontrol ettim - yerel bin klasörlerinden tüm dll, pdb dosyalarını sildim, Temizle, Yeniden Oluştur, Geçici ASP.NET Dosyalarının tüm klasörlerini temizledim, TRACE / DEBUG bayraklarının ayarlandığından, DLL yollarının kontrol edildiğinden emin olun.

Etkilenen proje (ler) için kaybolmaması için bırakmak:

Proje Özellikleri -> Derleme -> Gelişmiş -> Hata Ayıklama Bilgisi: Tam.

Bunu yapmadan önce hata ayıklama yapılandırmasının seçili olup olmadığını kontrol etmek istersiniz, tabii ki aksi takdirde.


0

Bir ASP.NET projesinde hata ayıklamaya çalışıyorsanız, projenin Özellikler> Web> Sunucular açılır listesinin "IIS Express" olarak ayarlandığından emin olun (burada her şeyi kontrol etmenin yanı sıra).


0

Ben hata ayıklama yapılandırma (VS 2017 Modülleri penceresinden görüldüğü gibi) bile optimize edilmiş karışık c ++ / cli mfc uzantısı dlls vardı. Önceki cevabın önerdiği gibi "VS2013'te şu konuma gidin: Araçlar -> Seçenekler -> Hata Ayıklama -> Genel ve 'Yönetilen uyumluluk modunu kullan' seçeneğini etkinleştirin. Bu, yeni işlev değerlendirme davranışını devre dışı bırakır." Bu ayarlar VS 2017'de de bulunur.

Ancak bu yeterli değildi, bu yüzden de başka bir MFC app proje dosyasından uzantısı dll proje dosyasına UseDebugLibraries ayarını kopyaladı.

    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
      ...
      <UseDebugLibraries>true</UseDebugLibraries>

Sonra yeniden inşa ve bu sorunu çözdü.


0

Visual Studio 2012'de Araçlar> Hata Ayıklama> Tam Zamanında " Yönetilen " seçeneğini etkinleştirmek benim için çalıştı.

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.