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
İzleme ve Hata Ayıklama Gereksinimleri
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
.
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.
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:
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:
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.
İ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çindeVeya programınızın TRACE seçeneğiyle derlenmiş olması gerekir:
/d:TRACE=True
Visual Basic'te/d:TRACE
Visual C# ve C++ içindeC# 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):
İ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.Assert System.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" );
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.
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.