2013-07-02 37 views
7

Uygulamamı çalıştırırken, Visual Studio'nun Çıkış panelinde aşağıdaki istisna günlüğünü buldum.System.InvalidOperationException System.Windows.Forms.dll dosyasında ayrıntıları nasıl?

tip system.data.dll 'Ilk şansını istisna aşağıdaki gibi uygulamanın mimar

System.Windows.Forms.dll

meydana geldi.

  • İkinci konu: "Listeyi öğeye ekleyin" veya "listeye öğeyi değiştir" komutunu bir sıraya alın.
  • Ana iş parçacığı: Bir sıradan çıkar ve her komut tarafından tanımlanan işlemi ekleme veya değiştirme işlemini gerçekleştir.

ben , çağrılan ınvalidoperationexception ayrıntılarını bilmek istiyorum ancak yalnızca Çıktı panelinde gösterilen, bu yüzden yığın izlemesi görüntüleme için bunu yakalayamaz. Bunu bilmenin bir yolu var mı?

+0

Tüm uygulamayı bir 'try' /' catch' içinde sarın mı? Her özel durumun üstesinden gelmek için ayarlanmış olan hata ayıklayıcıda çalıştırılsın mı? – Bobson

+1

Program.Main dosyasının tamamını deneyin veya yakalayın, ancak InvalidOperationException'ı yakalayamaz. – kobake

+2

'Debug -> Exceptions ...' seçeneğine gidin ve 'Common language Runtime Exceptions' yanında' Thrown' seçeneğini işaretleyin. – Bobson

cevap

11

'un gibi bir istisna tetiklemesinin en iyi yolu, tüm özel durumları kırmak için hata ayıklayıcısını ayarlamaktır.

Sen Debug menüsüne gidip Exceptions... seçme ve Common Language Runtime Exceptions yanındaki Thrown seçeneğini işaretleyerek yapabilirsiniz. Bu, nerede veya nerede kullanıldığına bakılmaksızın bir .NET istisnası atıldığı zaman kesilir.

Bu hatasını düzeltir ve numaralı sorunu düzeltmez, ancak bu sorunun saptanmasına yardımcı olur.

+0

Teşekkürler, bunun istisnasının ayrıntılarını aldım! – kobake

1

aşağıdakileri yaparak deneyin:

  1. gerekli yerde bir kesme noktası ekleme
  2. kırılma noktasında sağ tıklayın ve "vurduğunda .."
  3. kontrol kutusu "bir mesaj yazdır" ve istediğiniz bilgileri görüntülemek için gösterdikleri belirteçleri kullanın (örneğin, funciton, stacktrace, iş parçacığı kimliği/adı, işlem kimliği/adı vb.).
  4. Programın yazdırıldıktan sonra çalıştırmaya devam etmesini isterseniz mesaj (yani kesme noktasında duraklatmak istemiyorsanız), aynı zamanda "Yürütülmesine devam" kutu


başkaları tarafından öne sürülmüştür olarak Büyük bir olasılıkla, try/catch ile bu tekniği birleştirmek isteyeceksiniz ck. Diğerlerinin cevaplarında verilen kodu tekrarlamak istemiyorum, ama aramalarınızı sarmak için Brian'ın try/catch'unu kullanıyorum ve sonra bu tekniği kullanarak kesme noktalarını ayarlayın.


Not: Ayrıca bu tekniği kullanabilir ve "kesme koşulları" yöntemleri (yani, baskı sonuçları) ve/veya değişim değerlerini çağırmak için (ikincisi kesmek biraz da, olup ve sadece tamamen gerekli ve 64-bit bir uygulama üzerinde çalışıyorsanız yapılmalıdır. Bu ek özellikler, bu durumda sizin için de kullanılabilir veya olmayabilir.

+0

Teşekkürler, ancak bir istisna eklemek için iyi bir yere karar veremiyorum çünkü istisnanın neden olduğu bilmiyorum. – kobake

+0

Bu durumda, geçerli yürütme işlevinin adını ("$ FUNCTION" belirteci) yazdırmak için bir kaç kesme noktası oluşturur ve "Devam etmeye devam et" kutusunu true olarak ayarlayın. İstisnanın gerçekleştiğini düşündüğünüz yerlerden önce ve sonra yerleştirin ve aramanızı orada daraltın (ikili aramayı düşünün, sadece kesme noktaları ile). –

1

kullanın böyle bir deneme/yakalama:

try 
{ 
    //Some code here. 
    //Also, set your breakpoints here.   
} 

catch (InvalidOperationException exc) 
{ 
    MessageBox.Show(exc.ToString()); 
} 

catch (Exception exception) 
{ 
    MessageBox.Show(exception.Message); 
} 

durum işleme C# (ve diğer dillerde) 'de en belirli istisna den az spesifik istisna tipine gider. Yukarıdaki örnek, yığın izini MessageBox'da da gösterecektir.

+0

Önerdiğiniz gibi, tüm try/catch bloğuna catch (InvalidOperationException) ayarlıyorum, ancak uygulama ona ulaşmıyor ... – kobake

İlgili konular