Visual Studio: İşlenen istisnalar nasıl kırılır?


165

İşlenen bir istisna olduğunda Visual Studio'nun kırılmasını istiyorum (yani yalnızca "İlk şans" iletisini görmek istemiyorum, gerçek istisnayı hata ayıklamak istiyorum).

Örneğin, hata ayıklayıcı istisna kırmak istiyorum:

try
{
   System.IO.File.Delete(someFilename);
}
catch (Exception)
{
   //we really don't care at runtime if the file couldn't be deleted
}

Visual Studio.NET için şu notlarla karşılaştım :

1) VS.NET'te Hata Ayıklama Menüsü >> "İstisnalar ..." >> "Ortak Dil Çalışma Zamanı İstisnaları" >> "Sistem" e gidin ve "System.NullReferenceException" ı seçin

2) Bu iletişim kutusunun altında "İstisna atıldığında:" grup kutusu var, "Hata ayıklayıcıya gir" i seçin

3) Senaryonuzu çalıştırın. İstisna atıldığında, hata ayıklayıcı durur ve "System.NullReferenceException" türünde bir istisna atılır. [Break] [Devam] "

[Ara] tuşuna basın. Bu sizi soruna neden olan kod satırına sokacaktır.

Ancak Visual Studio 2005 için geçerli değildir ( Hata Ayıkla menüsünde bir Özel Durum seçeneği yoktur ).

Herkes bu seçenekleri bul iletişim kutusunun " İstisna atıldığında " grup kutusu, " Hata ayıklayıcıyı kırmak " seçeneği ile nerede biliyor mu ?

Güncelleme: Sorun, Hata Ayıklama menümün İstisnalar öğesi olmamasıydı . Menüyü manuel olarak eklemek için özelleştirdim.


9
VS2015'te Hata Ayıklama-> Windows-> İstisna Ayarları altında
PeterVermont

Nasıl bulmam biraz zaman aldı geri varsayılan i, buna mukabil yeni bir cevap istisna ayarının bazı değiştirdikten sonra istisna ayarları. istisna ayarlarını varsayılanlara geri
yükle

Yanıtlar:


170

Bir çözüm açıkken, Hata Ayıkla - İstisnalar ( Ctrl+ D, E) menü seçeneğine gidin. Buradan, Atılan veya Kullanıcı tarafından işlenmeyen istisnaları ihlal etmeyi seçebilirsiniz .

EDIT: Benim örnek C # "profili" ile ayarlanmış belki de diğer profiller için orada değil?


10
Sadece böyle bir seçeneğim yok. Bu benim karışıklığımı açıklayacaktı.
Ian Boyd

58
hata ayıklama menüsü vardı, ama hiçbir istisna seçenekleri. i manuel olarak eklemek için menü özelleştirilmiş; kısayol tuşu her iki şekilde de çalıştı (Ctrl + Alt + E)
Ian Boyd

3
Ayrıca, VS2010 ortamını "Araçlar", "Dışa Aktarma Ayarlarını İçe Aktar" seçeneğine gidip C # ortamına sıfırlamayı seçerek sıfırlayabilirsiniz ... İstisnalar Alt
Menüsü

14
Visual Studio 2017 altında Common Language Runtime Exceptions> öğesini seçtim <All Common Language Runtime Exceptions not in this list>ve en çılgın hayallerim gerçek oldu.
Aaron Newton

9
Visual Studio 2015: Hata ayıklama -> Windows -> İstisna Ayarları
achecopar

47

VS2005'te bir 'istisnalar' penceresi var ... hata ayıklarken Ctrl+ Alt+ deneyin Eve durdurmak istediğiniz istisna için 'Atılan' onay kutusunu tıklayın.


Tam olarak istediğim bu. Menüde nerede? Hayatım boyunca bulamıyorum.
Ian Boyd

Klavye kısayolu profile göre değişebilir (C # geliştirici, C ++ geliştirici, vb.)
Asaf R

1
Bir menü öğem var: Hata ayıklama -> İstisnalar. Bu VS2005 Professional ile. Express sürümü mü kullanıyorsunuz?
Rob Walker

5
İstisnalar menü öğesini istiyorsanız: Araçlar | Özelleştir .... Komutlar sekmesini tıklayın. Kategoriler kutusunda Hata Ayıklama kategorisini seçin. Özel Durumlar ... komut öğesini bulun, ardından uygulamanın üst tarafındaki Hata Ayıkla menüsüne sürükleyip menüdeki uygun yere bırakın. (yorumlarda bulundu: blogs.vertigo.com/personal/keithc/Blog/archive/2007/07/20/… )
sotto

33

Beklenti ayarları için yeni bir yer bulmak için biraz zaman aldı, bu nedenle yeni bir cevap.

Visual Studio 2015'ten bu yana , İstisna Ayarları Penceresinde (Hata Ayıklama-> Windows-> İstisna Ayarları) hangi İstisnaların durduğunu kontrol edersiniz. Kısayol hala Ctrl- Alt-E .

Özel istisnaları ele almanın en basit yolu "bu listede olmayan tüm istisnaları" seçmektir.

İşte ingilizce versiyonundan bir ekran görüntüsü:

resim açıklamasını buraya girin

İşte almanca versiyonundan bir ekran görüntüsü:

resim açıklamasını buraya girin


16

Visual Studio 2015 ve sonrasında, "İstisna Ayarları" iletişim kutusuna ( Ctrl+ Alt+ E) gitmeniz ArgumentNullExceptionve işlenen özel durumları sonlandırmak için "Ortak Dil Çalışma Zamanı Özel Durumları" nı (veya istediğiniz belirli bir tanesini ) işaretlemeniz gerekir .

Adım 1 Aşama 1 Adım 2 Adım 2


8

Kontrol Debugger ile Durumları Yönetmek sayfa, bu nasıl kurulacağı açıklanır.

Temel olarak, adımlar (hata ayıklama sırasında):

  1. Hata Ayıkla menüsünde Özel Durumlar'ı tıklatın.

  2. Özel Durumlar iletişim kutusunda, tüm özel kategoriler için, örneğin Ortak Dil Çalışma Zamanı Özel Durumları için Atılmış'ı seçin.

    -veya-

    Bir istisna kategorisinin düğümünü genişletin, örneğin Ortak Dil Çalışma Zamanı İstisnaları ve bu kategorideki belirli bir istisna için Atılmış'ı seçin.


1

Kullandığım bir teknik aşağıdaki gibidir. Hata ayıklamaya çalıştığınıza bağlı olarak bir veya birden çok deneme yakalama bloğu için kullanabileceğiniz genel bir değişken tanımlayın ve aşağıdaki yapıyı kullanın:

if(!GlobalTestingBool)
{
   try
   {
      SomeErrorProneMethod();
   }
   catch (...)
   {
      // ... Error handling ...
   }
}
else
{
   SomeErrorProneMethod();
}

IDE'nin kırılmasını istemediğim bazı istisnalar olduğu için bunun test açısından bana biraz daha esneklik verdiğini düşünüyorum.


3
Bu kullanışlı bir tekniktir - işlenen istisnayı işlenmeyen bir istisna haline getirir, böylece hata ayıklayıcı otomatik olarak durur. GlobalTestingBool'unuzu ayarlamanın iyi bir yolu olmadığı sürece neden indirildiğinden emin değilim. Başka bir, muhtemelen daha iyi bir seçenek Debugger.IsAttached kullanmaktır.
Joe White

Bunu her deneme / yakalama işlemine eklemeniz ve kodunuzu yeniden derlemeniz gerekir. Zaten hata ayıklamanın ortasındaysanız çok kullanışlı değil.
Maksimum

İstisnai bir durum - kabul edilemez bir şey varsa - kodda bir istisna atılmalı ve bunun nasıl ele alınacağı konusunda karar verilebilecek bir seviyede yakalanmalıdır. Bunun gibi kodlar yürütme yollarını zorlaştırır.
Lee Oades

Bu gerçekten eski bir cevap olduğunu biliyorum, ama benim gibi rastgele googlers için, sadece ekleyebilirsinizcatch(){/*handle or not*/ throw; } // throw without any exception specified will rethrow original exception with original callstack etc
Jan 'splite' K.

0

Çevrimiçi dokümantasyon biraz belirsiz görünüyor, bu yüzden biraz test yaptım. Özel Durumlar iletişim kutusundan atılan öğenin kesilmesinin seçilmesi, program yürütmenin işlenen veya işlenmeyen tüm özel durumları kesmesine neden olur . Sadece ele alınan istisnaları kırmak istiyorsanız, tek başvurunuz kodunuzdan geçmek ve ele alınan istisnalarınıza kesme noktaları koymak gibi görünüyor. Bu biraz aşırı görünüyor, bu nedenle bir istisnayı ele aldığınızda bir hata ayıklama ifadesi eklemek daha iyi olabilir. Sonra bu çıktıyı gördüğünüzde, koddaki o satıra bir kesme noktası ayarlayabilirsiniz.

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.