Yönetilen Koddaki 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 derlemesiyle çalışıyorsanız programınız kesme moduna girer.

Bu konuda,

System.Diagnostics Ad Alanında Onaylar

Debug.Assert yöntemi

Debug.Assert'ın yan etkileri

İzleme ve Hata Ayıklama Gereksinimleri

Onay bağımsız değişkenleri

Assert davranışını özelleştirme

Yapılandırma dosyalarında onayları ayarlama

System.Diagnostics Ad Alanında Onaylar

Visual Basic ve Visual C# içinde, ad alanında bulunan veya Trace'den Debug yöntemini kullanabilirsinizAssert.System.Diagnostics 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 . Sınıfını koşullu derleme ile kullanarak aynı etkiyi Trace elde edebilirsiniz, örneğin #ifdef DEBUG... #endif.

Bu konuda

Debug.Assert yöntemi

System.Diagnostics.Debug.Assert Kodunuz doğruysa true tutması gereken koşulları test etmek için 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 deyimi kullanarak test edebilirsiniz:

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

Bu kodu hata ayıklayıcıda çalıştırdığınızda onay deyimi değerlendirilir. Ancak Yayın sürümünde karşılaştırma yapılmadığından ek yük oluşmaz.

Başka bir örnek de şudur. 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 onay yazabilirsiniz:

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

Kodunuzun Yayın sürümünü oluşturduğunuzda yöntemine System.Diagnostics.Debug.Assert yapılan çağrıların kaybolduğunu 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, öğesini Sürüm sürümünde kaybolmayan ile System.Diagnostics.Trace.Assertdeğiştirmeniz System.Diagnostics.Debug.Assert gerekir:

Sürüm sürümünüze ek yük eklemek için System.Diagnostics.Trace.Assert çağrılar, çağrısının System.Diagnostics.Debug.Assertaksine.

Bu konuda

Debug.Assert'ın yan etkileri

kullandığınızda System.Diagnostics.Debug.Assert, içindeki Assert herhangi bir kodun kaldırılırsa Assert programın sonuçlarını değiştirmediğinden emin olun. Aksi takdirde, yalnızca programınızın Yayın sürümünde ortaya çıkan bir hatayı yanlışlıkla ekleyebilirsiniz. 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 kullanımı System.Diagnostics.Debug.Assert ilk bakışta güvenli görünebilir, ancak işlevin her çağrıldığında bir sayacı güncelleştirebileceğ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ı deyimine System.Diagnostics.Debug.Assert yerleştirmeyin. Bunun yerine geçici bir değişken kullanın:

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

kullanırken System.Diagnostics.Trace.Assertbile işlev çağrılarının deyiminin Assert içine yerleştirilmesini önlemek isteyebilirsiniz. Sürüm derlemesinde deyimler 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:

  • #Const TRACE = True Visual Basic'te

  • #define TRACE Visual C# ve C++ içinde

    Veya programınızın TRACE seçeneğiyle derlenmiş olması gerekir:

  • /d:TRACE=True Visual Basic'te

  • /d:TRACE Visual C# ve C++ içinde

    C# veya Visual Basic Release derlemesinde Hata Ayıklama yöntemlerini kullanmanız gerekiyorsa, Yayın yapılandırmanızda DEBUG simgesini tanımlamanız gerekir.

    C++ sınıf yöntemlerini desteklemez Debug . Sınıfını koşullu derleme ile kullanarak aynı etkiyi Trace elde edebilirsiniz, örneğin #ifdef DEBUG... #endif. Bu simgeleri <Proje> Özellik Sayfaları iletişim kutusunda tanımlayabilirsiniz. Daha fazla bilgi için bkz. Visual Basic Hata Ayıklama Yapılandırması için Proje Ayarlar Değiştirme veya C veya C++ Hata Ayıklama Yapılandırması için Proje Ayarlar Değiştirme.

Onay bağımsız değişkenleri

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. Veya yalnızca bir bağımsız değişkenle çağırırsanız System.Diagnostics.Trace.Assert(Boolean)System.Diagnostics.Debug.Assert(Boolean), Assert yöntem koşulu denetler ve sonuç false ise çağrı yığınının içeriğini Çıkış penceresine döndürür. Aşağıdaki örnekte ve gösterilmektedir System.Diagnostics.Trace.Assert(Boolean)System.Diagnostics.Debug.Assert(Boolean):

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

İkinci ve üçüncü bağımsız değişkenler varsa dize olmalıdır. veya öğesini iki veya üç bağımsız değişkenle çağırırsanız System.Diagnostics.Trace.AssertSystem.Diagnostics.Debug.Assert , 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 örnekte iki bağımsız değişken gösterilir System.Diagnostics.Debug.Assert(Boolean, String) ve System.Diagnostics.Trace.Assert(Boolean, String) kullanılır:

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

Aşağıdaki örnekte üç bağımsız değişken gösterilir System.Diagnostics.Debug.Assert(Boolean, String, String) ve System.Diagnostics.Trace.Assert(Boolean, String, String) kullanılır:

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 işlemi başarısız olduğunda gerçekleşen eylemler veya Listeners özelliği tarafından Listeners denetlenmektedir.

Koleksiyona nesne TraceListener ekleyerek, bir nesnesini koleksiyondan Listeners kaldırarak TraceListener veya farklı davranması için mevcut TraceListener bir yöntemi geçersiz kılarak System.Diagnostics.TraceListener.Fail çıkış davranışını özelleştirebilirsinizListeners.

Örneğin, Onay Başarısız iletişim kutusunu görüntülemek yerine bir olay günlüğüne yazmak için yöntemini geçersiz kılabilirsinizSystem.Diagnostics.TraceListener.Fail.

Çıktıyı bu şekilde özelleştirmek için, programınızın bir dinleyici içermesi ve yöntemini devralıp TraceListener geçersiz kılmanız System.Diagnostics.TraceListener.Fail gerekir.

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

Bu konuda

Yapılandırma dosyalarında onayları 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.