Aracılığıyla paylaş


Yönetilen Kodda Onaylar

Bir onay veya Assert deyimi, Assert deyimine bağımsız değişken olarak belirttiğiniz bir koşulu test eder. Koşul true olarak değerlendirilirse işlem yapmanız gerekmez. Koşul false olarak değerlendirilirse onay başarısız olur. Hata ayıklama derlemesi ile çalıştırıyorsanız, programınız kesme moduna girer.

Bu konuda

System.Diagnostics İsim Alanında Doğrulamalar

Debug.Assert yöntemi

Debug.Assert'ın yan etkileri

İzleme ve Hata Ayıklama Gereksinimleri

İddia bağımsız değişkenleri

Assert davranışını özelleştirme

Yapılandırma dosyalarında doğrulamaları ayarlama

System.Diagnostics Namespace'de Doğrulamalar

Visual Basic ve Visual C# içinde, Assert ad alanında bulunan Debug veya Trace içinden System.Diagnostics yöntemini kullanabilirsiniz. Debug sınıf yöntemleri programınızın Yayın sürümüne dahil değildir, bu nedenle yayın kodunuzun boyutunu veya hızını azaltmaz.

C++ sınıf yöntemlerini desteklemez Debug . Koşullu derleme ile Trace sınıfını kullanarak aynı etkiyi elde edebilirsiniz, örneğin #ifdef DEBUG... #endif.

Bu konuda

Debug.Assert yöntemi

Kodunuz doğruysa doğru olması gereken koşulları test etmek için System.Diagnostics.Debug.Assert yöntemini serbestçe kullanın. Örneğin, bir tamsayı bölme işlevi yazdığınızı varsayalım. Matematik kurallarına göre bölen asla sıfır olamaz. Bunu bir onay kullanarak test edebilirsiniz:

int IntegerDivide ( int dividend , int divisor )
{
    Debug.Assert ( divisor != 0 );
    return ( dividend / divisor );
}

Bu kodu hata ayıklayıcı altında çalıştırdığınızda onay deyimi değerlendirilir, ancak Sürüm sürümünde karşılaştırma yapılmaz, bu nedenle ek yük yoktur.

Başka bir örnek aşağıda verilmiştir. Aşağıdaki gibi bir çek hesabı uygulayan bir sınıfınız var:

float balance = savingsAccount.Balance;
Debug.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );

Hesaptan para çekmeden önce, hesap bakiyesinin çekilmeye hazır olduğunuz tutarı karşılamak için yeterli olduğundan emin olmak istiyorsunuz. Bakiyeyi denetlemek için bir doğrulama yazabilirsiniz:

float balance = savingsAccount.Balance;
Trace.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );

Kodunuzun Yayın sürümünü oluşturduğunuzda System.Diagnostics.Debug.Assert yöntemine yapılan çağrıların kaybolacağını unutmayın. Bu, bakiyeyi denetleen çağrının Yayın sürümünde kaybolduğu anlamına gelir. Bu sorunu çözmek için, System.Diagnostics.Debug.Assert öğesini Sürüm sürümünde kaybolmayan System.Diagnostics.Trace.Assert ile değiştirmeniz gerekir.

Yayın sürümünüze ek yük getiren System.Diagnostics.Trace.Assert çağrıları, System.Diagnostics.Debug.Assert çağrılarının aksine.

Bu konuda

Debug.Assert'ın yan etkileri

Ne zaman System.Diagnostics.Debug.Assert kullandığınızda, Assert içindeki herhangi bir kodun, Assert kaldırıldığında, programın sonuçlarını değiştirmediğinden emin olun. Aksi takdirde, yanlışlıkla yalnızca programınızın Yayın sürümünde görüntülenen bir hataya neden olabilirsiniz. Aşağıdaki örnek gibi işlev veya yordam çağrıları içeren onaylar konusunda özellikle dikkatli olun:

// unsafe code
Debug.Assert (meas(i) != 0 );

Bu System.Diagnostics.Debug.Assert kullanımı ilk bakışta güvenli görünse de, fonksiyonun her çağrıldığında bir sayacı güncellediğini varsayalım. Yayın sürümünü oluşturduğunuzda, bu meas çağrısı ortadan kaldırıldığından sayaç güncelleştirilmez. Bu, yan etkisi olan bir işlev örneğidir. Yan etkileri olan bir işlev çağrısının ortadan kaldırılması, yalnızca Sürüm sürümünde görünen bir hataya neden olabilir. Bu tür sorunları önlemek için, işlev çağrılarını System.Diagnostics.Debug.Assert ifadesine yerleştirmeyin. Bunun yerine geçici bir değişken kullanın:

temp = meas( i );
Debug.Assert ( temp != 0 );

System.Diagnostics.Trace.Assert kullanıyor olsanız bile, fonksiyon çağrılarını bir Assert deyim içinde yerleştirmekten kaçınmak isteyebilirsiniz. Sürüm derlemesinde ifadeler ortadan kaldırılmadığından System.Diagnostics.Trace.Assert bu tür çağrılar güvenli olmalıdır. Ancak, alışkanlık olarak bu tür yapılardan kaçınıyorsanız, kullanırken System.Diagnostics.Debug.Asserthata yapma olasılığınız daha düşüktür.

Bu konuda

İzleme ve Hata Ayıklama Gereksinimleri

Projenizi Visual Studio sihirbazlarını kullanarak oluşturursanız, TRACE simgesi varsayılan olarak hem Yayın hem de Hata Ayıklama yapılandırmalarında tanımlanır. DEBUG simgesi varsayılan olarak yalnızca Debug derlemesinde tanımlanır.

Aksi takdirde, yöntemlerin çalışması için Trace programınızın kaynak dosyanın en üstünde aşağıdakilerden birine sahip olması gerekir:

Argümanları doğrula

System.Diagnostics.Trace.Assert ve System.Diagnostics.Debug.Assert en fazla üç bağımsız değişken alır. Zorunlu olan ilk bağımsız değişken, denetlemek istediğiniz koşuldur. Eğer yalnızca bir bağımsız değişkenle System.Diagnostics.Trace.Assert(Boolean) veya System.Diagnostics.Debug.Assert(Boolean) çağırırsanız, Assert yöntemi koşulu denetler ve sonuç false ise çağrı yığınının içeriğini Çıkış penceresine yazdırır. Aşağıdaki örnekte System.Diagnostics.Trace.Assert(Boolean) ve System.Diagnostics.Debug.Assert(Boolean) gösterilmektedir:

Debug.Assert ( stacksize > 0 );
Trace.Assert ( stacksize > 0 );

Eğer mevcutsa, ikinci ve üçüncü argümanlar string türünde olmalıdır. System.Diagnostics.Trace.Assert veya System.Diagnostics.Debug.Assert öğesini iki veya üç bağımsız değişkenle çağırırsanız, ilk bağımsız değişken bir koşuldur. yöntemi koşulu denetler ve sonuç false ise ikinci dizeyi ve üçüncü dizeleri verir. Aşağıdaki örnek, System.Diagnostics.Debug.Assert(Boolean, String) ve System.Diagnostics.Trace.Assert(Boolean, String) ile iki bağımsız değişkenin nasıl kullanıldığını göstermektedir.

Debug.Assert ( stacksize > 0, "Out of stack space" );
Trace.Assert ( stacksize > 0, "Out of stack space" );

Aşağıdaki örnek, System.Diagnostics.Debug.Assert(Boolean, String, String) ve System.Diagnostics.Trace.Assert(Boolean, String, String)'in üç bağımsız değişkenle nasıl kullanıldığını gösterir.

Debug.Assert ( stacksize > 100, "Out of stack space" , "Failed in inctemp" );
Trace.Assert ( stacksize > 0, "Out of stack space", "Failed in inctemp" );

Bu konuda

Assert davranışını özelleştirme

Uygulamanızı kullanıcı arabirimi modunda çalıştırırsanız, Assert koşul başarısız olduğunda yöntem Onay Başarısız iletişim kutusunu görüntüler. Onaylama başarısız olduğunda meydana gelen eylemler, Listeners veya Listeners özelliği tarafından kontrol edilmektedir.

Koleksiyona TraceListener nesne Listeners ekleyerek, koleksiyondan TraceListenerListeners kaldırarak veya mevcut System.Diagnostics.TraceListener.Fail yöntemini TraceListener geçersiz kılarak çıkış davranışını farklı şekilde özelleştirebilirsiniz.

Örneğin, System.Diagnostics.TraceListener.Fail iletişim kutusunu görüntülemek yerine bir olay günlüğüne yazmak amacıyla yöntemini geçersiz kılabilirsiniz.

Çıktıyı bu şekilde özelleştirmek için, programınızda bir dinleyici bulunmalı ve TraceListener'den devralarak onun System.Diagnostics.TraceListener.Fail yöntemini geçersiz kılmalısınız.

Daha fazla bilgi için bkz. İzleme Dinleyicileri.

Bu konuda

Yapılandırma dosyalarında doğrulamaları ayarlama

Onayları hem program yapılandırma dosyanızda hem de kodunuzda ayarlayabilirsiniz. Daha fazla bilgi için bkz. System.Diagnostics.Trace.Assert veya System.Diagnostics.Debug.Assert.