Aracılığıyla paylaş


Visual Studio'da hata ayıklayıcı ile özel durumları yönetme

Özel durum, bir program yürütülürken oluşan bir hata durumunun göstergesidir. Hata ayıklayıcıya hangi özel durumların veya özel durum kümelerinin kesileceğini ve hata ayıklayıcının hangi noktada kesmesini istediğinizi (hata ayıklayıcıda duraklatma) belirtebilirsiniz. Hata ayıklayıcı bozulduğunda, özel durumun nerede oluşturulduğu gösterilir. Ayrıca özel durumlar ekleyebilir veya silebilirsiniz. Visual Studio'da açık bir çözümle, Özel Durum Ayarlar penceresini açmak için Windows > Özel Durum hata ayıklama > Ayarlar kullanın.

En önemli özel durumlara yanıt veren işleyiciler sağlayın. Özel durumlar için işleyicilerin nasıl ekleneceğini bilmeniz gerekiyorsa bkz . Daha iyi C# kodu yazarak hataları düzeltme. Ayrıca, hata ayıklayıcısını bazı özel durumlar için yürütmeyi her zaman kesecek şekilde yapılandırmayı öğrenin.

Bir özel durum oluştuğunda, hata ayıklayıcı Çıkış penceresine bir özel durum iletisi yazar. Aşağıdaki durumlarda yürütmeyi kesebilir:

  • İşlenmemiş bir özel durum oluşturulur.
  • Hata ayıklayıcısı, herhangi bir işleyici çağrılmadan önce yürütmeyi kesecek şekilde yapılandırılır.
  • Yalnızca Benim Kodum'unu ayarladınız ve hata ayıklayıcı, kullanıcı kodunda işlenmemiş herhangi bir özel durumda kesecek şekilde yapılandırıldı.

Dekont

ASP.NET, tarayıcıda hata sayfalarını gösteren üst düzey bir özel durum işleyicisi vardır. Yalnızca Kodum açık olmadığı sürece yürütmeyi bozmaz. Örnek için aşağıdaki Hata ayıklayıcıya kullanıcı tarafından işlenmeyen özel durumlara devam etmelerini söyleme bölümüne bakın.

Dekont

Bir Visual Basic uygulamasında hata ayıklayıcısı, Hata stilinde hata işleyicilerinde kullansanız bile tüm hataları özel durum olarak yönetir.

Özel durum oluştuğunda hata ayıklayıcıya kesmesini söyleyin

Hata ayıklayıcı, bir özel durumun oluştuğu noktada yürütmeyi kesebilir, bu nedenle bir işleyici çağrılmadan önce özel durumu inceleyebilirsiniz.

Özel Durum Ayarlar penceresinde (Hata Ayıklama > Windows > Özel Durumu Ayarlar), Ortak Dil Çalışma Zamanı Özel Durumları gibi bir özel durum kategorisi için düğümü genişletin. Ardından bu kategorideki system.AccessViolationException gibi belirli bir özel durumun onay kutusunu seçin. Özel durumlar kategorisinin tamamını da seçebilirsiniz.

Screenshot of Exception Settings check box.

Screenshot of Exception Settings check box.

Bahşiş

Özel durum Ayarlar araç çubuğundaki Arama penceresini kullanarak belirli özel durumları bulabilir veya belirli ad alanlarını (System.IO gibi) filtrelemek için aramayı kullanabilirsiniz.

Özel Durum Ayarlar penceresinde bir özel durum seçerseniz, işlenip işlenmediği fark etmez, özel durumun oluştuğu her yerde hata ayıklayıcı yürütmesi bozulacaktır. Şimdi özel durum, ilk şans özel durumu olarak adlandırılır. Örneğin, birkaç senaryo aşağıda verilmiştir:

  • Aşağıdaki C# konsol uygulamasında Main yöntemi bir bloğun içine try/catch AccessViolationException oluşturur.

    static void Main(string[] args)
    {
        try
        {
            throw new AccessViolationException();
            Console.WriteLine("here");
        }
        catch (Exception e)
        {
            Console.WriteLine("caught exception");
        }
        Console.WriteLine("goodbye");
    }
    

    Özel Durum Ayarlar'de AccessViolationException seçeneğini işaretlediyseniz, bu kodu hata ayıklayıcıda çalıştırdığınızda yürütme satırda bozulacaktırthrow. Ardından yürütmeye devam edebilirsiniz. Konsolun her iki satırı da görüntülemesi gerekir:

    caught exception
    goodbye
    

    ancak çizgi görüntülenmez here .

  • C# konsol uygulaması iki yöntemi olan bir sınıf kitaplığına başvurur. Bir yöntem bir özel durum oluşturur ve bunu işlerken ikinci bir yöntem aynı özel durumu oluşturur ancak işlemez.

    public class Class1
    {
        public void ThrowHandledException()
        {
            try
            {
                throw new AccessViolationException();
            }
            catch (AccessViolationException ave)
            {
                Console.WriteLine("caught exception" + ave.Message);
            }
        }
    
        public void ThrowUnhandledException()
        {
            throw new AccessViolationException();
        }
    }
    

    Konsol uygulamasının Main() yöntemi aşağıdadır:

    static void Main(string[] args)
    {
        Class1 class1 = new Class1();
        class1.ThrowHandledException();
        class1.ThrowUnhandledException();
    }
    

    Özel Durum Ayarlar'de AccessViolationException seçeneğini işaretlediyseniz, bu kodu hata ayıklayıcıda çalıştırdığınızda hem ThrowHandledException() hem de ThrowUnhandledException() içindeki satırda yürütme kesilecektirthrow.

Özel durum ayarlarını varsayılan ayarlara geri yüklemek için Listeyi varsayılan ayarlara geri yükle düğmesini seçin:

Screenshot of Restore Defaults in Exception Settings.

Screenshot of Restore Defaults in Exception Settings.

Hata ayıklayıcıya kullanıcı tarafından işlenmeyen özel durumlarda devam etmelerini söyleyin

.NET veya JavaScript kodunda Just My Code ile hata ayıklarsanız, hata ayıklayıcıya kullanıcı kodunda işlenmemiş ancak başka bir yerde işlenen özel durumlarda hata ayıklamayı önlemesini söyleyebilirsiniz.

  1. Özel Durum Ayarlar penceresinde, bir sütun etiketine sağ tıklayarak kısayol menüsünü açın ve sonra Sütunları > Göster Ek Eylemleri'ni seçin. (Kapattıysanız Yalnızca Kodum, bu komutu görmezsiniz.) Ek Eylemler adlı üçüncü bir sütun görüntülenir.

    Screenshot of Additional Actions column.

    Screenshot of Additional Actions column.

    Bu sütundaki kullanıcı kodunda işlenmediğinde Devam Et'i gösteren bir özel durum için, bu özel durum kullanıcı kodunda işlenmez ancak dışarıdan işlenirse hata ayıklayıcı devam eder.

  2. Belirli bir özel durum için bu ayarı değiştirmek için özel durumu seçin, kısayol menüsünü göstermek için sağ tıklayın ve Kullanıcı Kodunda İşlenmeyenLere Devam Et'i seçin. Ayrıca, Ortak Dil Çalışma Zamanı özel durumlarının tamamı gibi bir özel durum kategorisinin tamamının ayarını da değiştirebilirsiniz.

    Screenshot of Continue when unhandled in user code setting.

    Screenshot of Continue when unhandled in user code setting.

Örneğin, ASP.NET web uygulamaları özel durumları http 500 durum koduna (ASP.NET Web API'sinde özel durum işleme) dönüştürerek işler ve bu da özel durumun kaynağını belirlemenize yardımcı olmayabilir. Aşağıdaki örnekte, kullanıcı kodu bir oluşturan FormatExceptionçağrısı String.Format() yapar. Yürütme aşağıdaki gibi sonlar:

Breaks on user-unhandled exception

Özel durum ekleme ve silme

Özel durumlar ekleyebilir ve silebilirsiniz. Bir kategoriden özel durum türünü silmek için özel durumu seçin ve Özel durum Ayarlar araç çubuğundaki Liste düğmesinden (eksi işareti) seçili özel durumu sil'i seçin. Veya özel duruma sağ tıklayıp kısayol menüsünden Sil'i seçebilirsiniz. Bir özel durumun silinmesi, özel durumun işaretinin kaldırılmış olmasıyla aynı etkiye sahiptir. Bu, hata ayıklayıcının oluşturulduğu sırada bozulmayacağından kaynaklanır.

Özel durum eklemek için:

  1. Özel Durum Ayarlar penceresinde özel durum kategorilerinden birini seçin (örneğin, Ortak Dil Çalışma Zamanı).

  2. Seçili kategoriye özel durum ekle düğmesini (artı işareti) seçin.

    Screenshot of Add an exception to the selected category button.

    Screenshot of Add an exception to the selected category button.

  3. Özel durumun adını yazın (örneğin, System.UriTemplateMatchException).

    Screenshot of Type exception name.

    Screenshot of Type exception name.

    Özel durum listeye eklenir (alfabetik sırada) ve otomatik olarak denetlenilir.

GPU Bellek Erişimi Özel Durumları, JavaScript Çalışma Zamanı Özel Durumları veya Win32 Özel Durumlar kategorilerine özel durum eklemek için hata kodunu ve açıklamayı ekleyin.

Bahşiş

Yazım denetimi yapın! Özel Durum Ayarlar penceresi, eklenen bir özel durumun varlığını denetlemez. Dolayısıyla Sytem.UriTemplateMatchException yazarsanız, bu özel durum için bir giriş alırsınız (System.UriTemplateMatchException için değil).

Özel durum ayarları çözümün .suo dosyasında kalıcı hale getirmek için belirli bir çözüme uygulanır. Belirli özel durum ayarlarını çözümler arasında yeniden kullanamazsınız. Artık yalnızca eklenen özel durumlar kalıcı hale geliyor; silinen özel durumlar değildir. Bir özel durum ekleyebilir, çözümü kapatıp yeniden açabilirsiniz ve özel durum yine de orada olur. Ancak bir özel durumu siler ve çözümü kapatır/yeniden açarsanız, özel durum yeniden görünür.

Özel Durum Ayarlar penceresi, C# dilinde genel özel durum türlerini destekler ancak Visual Basic'te desteklemez. gibi MyNamespace.GenericException<T>özel durumları kesmek için, özel durumu MyNamespace.GenericException'1 olarak eklemeniz gerekir. Yani, aşağıdaki kod gibi bir özel durum oluşturduysanız:

public class GenericException<T> : Exception
{
    public GenericException() : base("This is a generic exception.")
    {
    }
}

Önceki yordamı kullanarak özel durum Ayarlar ekleyebilirsiniz:

Screenshot of Add generic exception.

Screenshot of Add generic exception.

Özel duruma koşul ekleme

Özel durumlarla ilgili koşulları ayarlamak için Özel Durum Ayarlar penceresini kullanın. Şu anda desteklenen koşullar, özel durum için dahil etmek veya dışlamak için modül adlarını içerir. Modül adlarını koşul olarak ayarlayarak, özel durum için yalnızca belirli kod modüllerinde kesmeyi seçebilirsiniz. Ayrıca belirli modüllerde hata oluşmasını önlemeyi de seçebilirsiniz.

Dekont

Visual Studio 2017'den başlayarak özel duruma koşul ekleme işlemi desteklenir.

Koşullu özel durumlar eklemek için:

  1. Özel Durum Ayarlar penceresinde Koşulları düzenle düğmesini seçin veya özel duruma sağ tıklayıp Koşulları Düzenle'yi seçin.

    Screenshot of exception conditions.

  2. Özel duruma fazladan gerekli koşullar eklemek için her yeni koşul için Koşul Ekle'yi seçin. Ek koşul satırları görüntülenir.

    Screenshot of extra conditions for an exception.

  3. Her koşul satırı için modülün adını yazın ve karşılaştırma işleci listesini Eşittir veya Eşit Değil olarak değiştirin. Birden fazla modül belirtmek için adında joker karakterler (\*) belirtebilirsiniz.

  4. Bir koşulu silmeniz gerekiyorsa, koşul satırının sonundaki X işaretini seçin.