2011-05-16 21 views
5

Yansıma (Method.Invoke) kullanarak .NET işlevini çağırıyorum. Bu yöntemde bir hata oluşursa ve istisna kaldırılırsa, hata ayıklayıcı gerçek kodu göstermez, ancak Invoke() çağrısında durur. InnerException'dan istisna bilgilerini alabilirim, ancak bu durum, mevcut olan calltack ile normal hata ayıklamaya kıyasla çok sakıncalı. Method.Invoke kullanılarak çağrılan yöntemler, normal işlev çağrıları gibi hata ayıklanabilir mi?Hata ayıklama .NET'de çağrılan işlev

cevap

0
Benim geçici çözüm Tick() iç Timer ve çağrı yöntemini yaratmaktır

... cevabım mantıklı değil sanırım Zamanlayıcı -> Kene içinde yazık ki

6

Vurmayı sevdiğiniz şey "Just My Code" özelliğidir. Hata ayıklayıcı, varsayılan olarak geliştiricinin yazdığı kabul edilen kodda hata ayıklamayı sınırlar. Bu, bir WPF veya WinForms lansmanında hata ayıklamada mevcut olabilecek çok fazla gürültüyü azaltır.

Özel durum yardımcısı gibi öğelerin tüm kodlar için çalıştırılabilmesi için, Yalnızca Kodum'u devre dışı bırakmanız gerekir.

  • Araçlar -> Seçenekler
  • Debugger
  • işaretini kaldırın "Enable Just My Kod hata ayıklama" Bütün bunlardan
+1

Maalesef "Sadece Benim Kodunu Etkinleştir'i" çok güzel (ve uygun bazı durumlarda) değil zaten kontrolsüz oldu fonksiyon gövdesi

yoktur. Ama hem arayan hem de callee aslında benim kodum olduğu gibi alakasız görünüyor. – John

+1

@John, bu garip. Bir sonraki adım, tüm istisna türleri için "mola atmak" ı açmak ve beklediğim yeri terk edip etmediğimi görmek. Bu sizin sorununuzu çözmeyecek, ancak bizi bir adım daha ileriye taşıyacak. – JaredPar

+0

Bu çok garip, "mola atma" yı açtıktan sonra, yüklenemeyen XmlSerializer derlemesi için FileNotFound istisnası alıyorum. "Mola atmak" olmadan, her şey iyi çalışıyor. – John

2

ayrıca çağrılan alır yöntem haline böyle bir şey koyabilirsiniz, başarısız: temelde "programlama yoluyla" orada bir kesme noktası neden olacaktır

#if DEBUG 
    System.Diagnostics.Debugger.Break(); 
#endif 

.

Ayrıca yaparak onu biraz daha iyi yapabilir:

if(Debugger.IsAttached) 
    Debugger.Break(); 

Yani aslında ayıklayıcısında bunu çalıştırıyorsanız, yalnızca kıracağını.


Düzenleme: bunu düzenlemek için kodu varsa

2 düşünce, o zaman muhtemelen sadece VisualStudio aracılığıyla orada düzenli kesme noktası sopa olabilir. > Method.Invoke aracılığıyla çağrı fonksiyonu - -> fonksiyon kurulumları

GUI kodu: Özür :)

+1

Cevabınız mükemmel bir anlam ifade ediyor, @ @ JaredPar'ın cevabı hakkındaki yorumumu da görün. Kesme noktalarının atlanması ve yönteminizin işe yaraması ile ilgili sorunlarla karşılaşıyordum. – ajeh