ASSERT Yerine VERIFY Kullanma

MFC uygulamanızın hata ayıklama sürümünü çalıştırdığınızda herhangi bir sorun olmadığını varsayalım. Ancak, aynı uygulamanın yayın sürümü kilitleniyor, yanlış sonuçlar döndürüyor ve/veya başka anormal davranışlar sergiler.

Bu sorun, doğru şekilde çalıştığını doğrulamak için bir ASSERT deyimine önemli kod yerleştirdiğinizde oluşabilir. ASSERT deyimleri bir MFC programının yayın derlemesinde açıklama eklendiği için kod bir yayın derlemesinde çalışmaz.

İşlev çağrısının başarılı olduğunu onaylamak için ASSERT kullanıyorsanız, bunun yerine VERIFY kullanmayı göz önünde bulundurun. VERIFY makro, uygulamanın hem hata ayıklama hem de yayın derlemelerinde kendi bağımsız değişkenlerini değerlendirir.

Tercih edilen bir diğer teknik, işlevin dönüş değerini geçici bir değişkene atamak ve değişkeni bir ASSERT deyiminde test etmektir.

Aşağıdaki kod parçasını inceleyin:

enum {
    sizeOfBuffer = 20
};
char *buf;
ASSERT(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );

Bu kod, bir MFC uygulamasının hata ayıklama sürümünde mükemmel şekilde çalışır. çağrısı calloc( ) başarısız olursa, dosya ve satır numarasını içeren bir tanılama iletisi görüntülenir. Ancak, bir MFC uygulamasının perakende derlemesinde:

  • çağrısı calloc( ) hiçbir zaman gerçekleşmez, başlatılmamış olarak bırakılır buf veya

  • strcpy_s( ) "Hello, World" öğesini rastgele bir bellek parçasına kopyalar, büyük olasılıkla uygulamayı kilitler veya sistemin yanıt vermeyi durdurmasına neden olur veya

  • free() hiç ayrılmamış belleği boşaltmaya çalışır.

ASSERT'ı doğru kullanmak için kod örneği aşağıdaki şekilde değiştirilmelidir:

enum {
    sizeOfBuffer = 20
};
char *buf;
buf = (char *) calloc(sizeOfBuffer, sizeof(char) );
ASSERT( buf != NULL );
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );

Bunun yerine VERIFY komutunu da kullanabilirsiniz:

enum {
    sizeOfBuffer = 20
};
char *buf;
VERIFY(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );

Ayrıca bkz.

Yayın Derlemesi Sorunlarını Giderme