2012-08-22 26 views
6

Ondalık tip atamak için üçlü kullanmaya çalışıyorum. Benim için çalışmıyor. Deliriyor muyum?Ondalık On Üçlü Çalışmıyor

Hata ayıklamamın ekran görüntüsü. Adım atmadan önce her şeyin değerini görebilirsiniz. enter image description here

Ve bu adımı attıktan sonra değerdir. Geçerli seçeneklerden biri bile değil (1 veya 2000). enter image description here

Bilmediğim ondalık sayılarla garip bir sınırlama var mı? Tam/eğer mantıksal gösterimi tam olarak bozulduğunda iyi çalışıyor. Tahmin edebileceğim tek şey, yakın zamanda .NET Framework 4.5'i kurduğumdur.

GÜNCELLEME

Ben çözüm temizlenir ve ben yorumların önerildiği gibi ayıklama modunda derlendi kodu koşuyordu emin yaptık. Bunların hiçbiri bir şeyi değiştirmiş gibiydi.

Tüm birim testlerimin hala devam ettiğini fark ettiğimde merak etmeye başladım. Biraz daha zindelik verdikten sonra, bir kez daha adım attığımda (yani, memberItems.Add üzerinden adım attığım zaman) fiyatın sihirli olarak doğru değere sahip olduğunu buldum.

. Net, yineleyici bloklarda getiri komutuna benzeyen bir tür üçlü operatörün gecikmeli çözünürlüğünü yapar mı? Bunu daha önce hiç fark etmedim ama başka ne olabileceğini bilmiyorum. Sanırım, yanlışlıkla yayın modunda derlenmiş kodda da çalışıyor olabilirim. Kendimi kontrol ettikten sonra hata yaptım.

+0

Yanıt için teşekkürler. Ekran görüntülerine bak. Değişkenlerimin değerlerini görebilmeniz için birkaç izleme penceresini tutturdum. Basamağımdan sonra hala fiyat 0. –

+5

'Temiz' yapın ve yeniden oluşturun. Bazen hata ayıklama bilgisi gerçek yürütülebilir kod ile senkronize olur. – Servy

+10

Serbest bırakma modunda değil, hata ayıklama modunda çalıştığınızdan emin olun. Ayrıca, sabitlediğiniz "fiyatın" aynı kullanıcı tarafından yanlışlıkla bir üye değişkeni olmadığını doğrulayın. – dasblinkenlight

cevap

6

Bir ekran görüntüsünden kodu teşhis etmek imkansız, bu yüzden sadece bir tahmin.

Her zaman tamamen bir saat ifadesinin size söylediklerine güvenemezsiniz. İlk olası hata modu, optimize edilmiş hata ayıklama kodudur. fiyat gibi yerel bir değişken, genellikle yığın yerine bir cpu kaydında depolanacak jitter optimize edici tarafından optimize edilecektir. Saat ifadesi, cpu kayıt değeri değil, yığın konumu değerini gösterir. 0 ile ortak bir sonuç. Buna karşı sahip olduğunuz tek gerçek savunma, yalnızca Debug yapılandırması tarafından oluşturulan hata ayıklama kodudur.

İkinci hata modu, saat ifadelerinin değerlendirilme şeklidir. CLR, ekli bir hata ayıklayıcısını algıladığında ayrılmış bir iş parçacığı başlatır. Hata ayıklayıcı, bu ifadeyi saat ifadelerini değerlendirmek için kullanabilir. Bir değişkende herhangi bir iplik yakınlığı varsa bu yanlış gidebilir. Ortak durumlar, [ThreadStatic] veya COM nesnelerinin özellikleri olan değişkenlerdir.

+0

Bahsettiğim olası sorunlardan herhangi birinin benim durumumla alakalı olacağını sanmıyorum, ancak başladığımı bildiğimden çok daha fazla ayrıntı var, teşekkürler. Ayrıca tüm bunları nereden öğrendiğinizi merak ediyor musunuz? Herhangi bir özel eşya mı yoksa yıllar içinde mi aldın? –

0

Aynı problemi yaşadım ve delirdiğimi düşündüm.

ASP.NET uygulamasının IIS yerine "Visual Studio Developer Server" kullanılması için değiştirilmesinin onu düzelttiğini buldum. Yazıklık çünkü IIS kullanarak üretimde neler olup bittiğini daha yakın.