SORU
7 NİSAN 2009, Salı


VS hata ayıklama "hızlı izle" araç ve lambda ifadeleri

Neden ben “Hızlı izleme” penceresi? ayıklarken lambda ifadeleri kullanamaz

UDP: da

http://blogs.msdn.com/b/jaredpar/archive/2009/08/26/why-no-linq-in-debugger-windows.aspx

http://blogs.msdn.com/b/jaredpar/archive/2010/06/02/why-is-linq-absent-from-debugger-windows-part-2.aspx

CEVAP
7 NİSAN 2009, Salı


Olamaz / komut penceresi izle / Yerli lambda ifadeleri kullanın. Marc işaret ettiği gibi bu inanılmaz derecede karmaşık. Biraz daha fazla konu olsa dalmak istedim.

Çoğu insan hata anonim bir fonksiyon yürütmek olan şeyi kaybetmemek için bir boşluk oluşmaz. Ve isimsiz bir fonksiyon tanımlama çalışan bir çok hareket kod tabanı alt yapısını değiştirir. Bu kod, genel olarak değiştirme ve komut penceresinden özellikle, çok zor bir iştir.

Aşağıdaki kodu göz önünde bulundurun.

void Example() {
  var v1 = 42;
  var v2 = 56; 
  Func<int> func1 = () => v1;
  System.Diagnostics.Debugger.Break();
  var v3 = v1   v2;
}

Bu özel kod değeri v1 yakalamak için tek bir kapatma oluşturur. Kapatma yakalama isimsiz bir işlevi bir değişken kapsamı dışında ilan kullandığında gereklidir. Tüm niyet ve amaçlar için v1 artık bu işlevi var. Son satırı aslında daha çok aşağıdaki gibi görünüyor

var v3 = closure1.v1   v2;

Eğer işlevi Örnek hata çalıştırırsanız Sonu çizgisinde duracaktır. Şimdi eğer kullanıcı gözcü penceresine aşağıda yazılı düşünün

(Func<int>)(() => v2);

Bu düzgün yürütmek için hata ayıklayıcı (veya daha fazla EE uygun) değişken v2 için bir kapatma oluşturmak gerekir. Bu zor ama yapmak imkansız.

Gerçekten bu zor bir iş EE olsa ne yapar bu son satır. Bu sözler şimdi yürütülmelidir? Tüm niyet ve amaçlar için bir anonim işlev v2 değişken ve closure2 ile değiştirilir silinmiş.v2. Yani kodun son satırında artık okumak gerekiyor

var v3 = closure1.v1   closure2.v2;

Aslında kod bu sonuca ulaşmak için aslında EK bir eylem kod son satırı değiştirmek için EE gerektirir. Bu spesifik bir örnek mümkün ise, bu senaryo iyi bir kısmı değildir.

Bundan daha kötüsü, lambda ifadesi yeni bir kapatma oluşturmak olmamalı yürütülüyor. Aslında orijinal kapatılması için veri ekleme olmalı. Bu noktada düz sınırlamaları EK olarak çalışır.

Benim küçük bir örnek ne yazık ki sadece karşılaştığımız sorunlardan yüzeyi çizik. Bu konuda tam bir blog yazısı yazacağım diyorum ve umarım bu hafta sonu alacağım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Joshua Kywn

    Joshua Kywn

    17 Mayıs 2010
  • JTechTalk

    JTechTalk

    11 Temmuz 2010
  • Michael Zhang

    Michael Zhan

    8 EYLÜL 2012