Hata Ayıklama ve Hata Raporlama Makroları

Bu makrolar yararlı hata ayıklama ve izleme olanakları sağlar.

Veri Akışı Adı Açıklama
_ATL_DEBUG_INTERFACES Çağrıldığında _Module.Term algılanan arabirim sızıntılarını çıkış penceresine yazar.
_ATL_DEBUG_QI Tüm çağrıları QueryInterface çıkış penceresine yazar.
ATLASSERT C çalışma zamanı kitaplığında bulunan _ASSERTE makroyla aynı işlevi gerçekleştirir.
ATLENSURE Parametre doğrulama gerçekleştirir. Gerekirse ara AtlThrow
ATLTRACENOTIMPL Döküm cihazına belirtilen işlevin uygulanmadığını belirten bir ileti gönderir.
ATLTRACE Belirtilen bayraklara ve düzeylere göre hata ayıklayıcı penceresi gibi bir çıkış cihazına uyarı bildirir. Geriye dönük uyumluluk için dahil.
ATLTRACE2 Belirtilen bayraklara ve düzeylere göre hata ayıklayıcı penceresi gibi bir çıkış cihazına uyarı bildirir.

_ATL_DEBUG_INTERFACES

Bileşenlerinizin arabirimlerindeki tüm ve Release çağrıları çıkış penceresine izlemek için atl AddRef üst bilgi dosyalarını eklemeden önce bu makroyu tanımlayın.

#define _ATL_DEBUG_INTERFACES

Açıklamalar

İzleme çıkışı aşağıda gösterildiği gibi görünür:

ATL: QIThunk - 2008 AddRef : Object = 0x00d81ba0 Refcount = 1 CBug - IBug

Her izlemenin ilk bölümü her zaman olacaktır ATL: QIThunk. Şimdi, kullanılmakta olan belirli arabirim thunk değerini tanımlayan bir değerdir. Arabirim thunk, başvuru sayısını korumak ve burada kullanılan izleme özelliğini sağlamak için kullanılan bir nesnedir. Arabirimin istekleri IUnknown dışında her çağrısında QueryInterface yeni bir arabirim thunk oluşturulur (bu durumda, COM'un kimlik kurallarına uymak için her seferinde aynı thunk döndürülür).

Ardından hangi yöntemin çağrıldığını görürsünüz AddRef veya Release belirtirsiniz. Bunun ardından, arabirim başvuru sayısı değiştirilmiş olan nesneyi tanımlayan bir değer göreceksiniz. İzlenen değer, nesnenin this işaretçisidir.

İzlenen başvuru sayısı, bu thunk AddRef üzerindeki başvuru sayısıdır veya Release çağrıldı. Bu başvuru sayısının nesnenin başvuru sayısıyla eşleşmeyebileceğini unutmayın. Her thunk, COM'un başvuru sayma kurallarına tam olarak uymanıza yardımcı olmak için kendi başvuru sayısını korur.

İzlenen son bilgi parçası, nesnenin adı ve veya Release çağrısından etkilenen arabirimidirAddRef.

Sunucu kapatıldığında algılanan ve _Module.Term çağrılan arabirim sızıntıları şu şekilde günlüğe kaydedilir:

ATL: QIThunk - 2005 LEAK : Object = 0x00d81ca0 Refcount = 1 MaxRefCount = 1 CBug - IBug

Burada sağlanan bilgiler doğrudan önceki izleme deyimlerinde sağlanan bilgilerle eşlendiğinden, bir arabirim thunk'un tüm ömrü boyunca başvuru sayılarını inceleyebilirsiniz. Buna ek olarak, bu arabirimdeki en yüksek başvuru sayısının göstergesini alırsınız.

Not

_ATL_DEBUG_INTERFACES perakende derlemelerinde kullanılabilir.

_ATL_DEBUG_QI

Tüm çağrıları QueryInterface çıkış penceresine yazar.

#define _ATL_DEBUG_QI

Açıklamalar

Çağrısı QueryInterface başarısız olursa çıkış penceresi görüntülenir:

arabirim adı - failed

ATLASSERT

ATLASSERT makrosu, C çalışma zamanı kitaplığında bulunan _ASSERTE makroyla aynı işlevselliği gerçekleştirir.

ATLASSERT(booleanExpression);

Parametreler

booleanExpression
Sıfır olmayan veya 0 olarak değerlendirilen ifade (işaretçiler dahil).

Açıklamalar

Hata ayıklama derlemelerinde ATLASSERT booleanExpression değerini değerlendirir ve sonuç false olduğunda bir hata ayıklama raporu oluşturur.

Gereksinimler

Üst bilgi: atldef.h

ATLENSURE

Bu makro, bir işleve geçirilen parametreleri doğrulamak için kullanılır.

ATLENSURE(booleanExpression);
ATLENSURE_THROW(booleanExpression, hr);

Parametreler

booleanExpression
Test edilecek boole ifadesini belirtir.

Hr
Döndürülecek hata kodunu belirtir.

Açıklamalar

Bu makrolar, kullanıcıya yanlış parametre kullanımını algılamak ve bildirmek için bir mekanizma sağlar.

Makro ATLASSERT'i çağırır ve koşulun başarısız olup olmadığını çağırır AtlThrow.

ATLENSURE durumunda, AtlThrow E_FAIL ile çağrılır.

ATLENSURE_THROW durumda, AtlThrow belirtilen HRESULT ile çağrılır.

ATLENSURE ile ATLASSERT arasındaki fark, ATLENSURE'nin Yayın derlemelerinde ve Hata ayıklama derlemelerinde bir özel durum oluşturmasıdır.

Örnek

void MyImportantFunction(char* psz)
{
   ATLENSURE(NULL != psz);

   char mysz[64];
   strcpy_s(mysz, sizeof(mysz), psz);
}

Gereksinimler

Üst bilgi: afx.h

ATLTRACENOTIMPL

ATL'nin hata ayıklama derlemelerinde döküm cihazına " funcname uygulanmadı" dizesini gönderir ve E_NOTIMPL döndürür.

ATLTRACENOTIMPL(funcname);

Parametreler

funcname
[in] Uygulanmayan işlevin adını içeren bir dize.

Açıklamalar

Yayın derlemelerinde yalnızca E_NOTIMPL döndürür.

Örnek

ATLTRACENOTIMPL(_T("IOleControl::GetControlInfo"));   

Gereksinimler

Üst bilgi: atltrace.h

ATLTRACE

Belirtilen bayraklara ve düzeylere göre hata ayıklayıcı penceresi gibi bir çıkış cihazına uyarı bildirir. Geriye dönük uyumluluk için dahil.

ATLTRACE(exp);

ATLTRACE(
    DWORD category,
    UINT  level,
    LPCSTR lpszFormat, ...);

Parametreler

Exp
[in] Çıkış penceresine veya bu iletileri tuzağa düşüren herhangi bir uygulamaya gönderilecek dize ve değişkenler.

category
[in] Raporlanan olayın veya yöntemin türü. Kategori listesi için Açıklamalar'a bakın.

düzey
[in] Rapora izleme düzeyi. Ayrıntılar için Açıklamalar'a bakın.

lpszFormat
[in] Döküm cihazına gönderilecek biçimlendirilmiş dize.

Açıklamalar

ATLTRACE açıklaması için bkz . ATLTRACE2 . ATLTRACE ve ATLTRACE2 aynı davranışa sahiptir, ATLTRACE geriye dönük uyumluluk için dahil edilir.

ATLTRACE2

Belirtilen bayraklara ve düzeylere göre hata ayıklayıcı penceresi gibi bir çıkış cihazına uyarı bildirir.

ATLTRACE2(exp);

ATLTRACE2(
    DWORD category,
    UINT level,
    LPCSTR lpszFormat,  ...);

Parametreler

Exp
[in] Çıkış penceresine veya bu iletileri tuzağa düşüren herhangi bir uygulamaya gönderilecek dize.

category
[in] Raporlanan olayın veya yöntemin türü. Kategori listesi için Açıklamalar'a bakın.

düzey
[in] Rapora izleme düzeyi. Ayrıntılar için Açıklamalar'a bakın.

lpszFormat
[in] printfDöküm cihazına gönderilecek bir dize oluşturmak için kullanılacak -style biçim dizesi.

Açıklamalar

kısa ATLTRACE2 biçimi, hata ayıklayıcının çıkış penceresine bir dize yazar. İkinci ATLTRACE2 biçimi de çıktıyı hata ayıklayıcının çıkış penceresine yazar, ancak ATL/MFC İzleme Aracı ayarlarına tabidir (bkz . ATLTraceTool Örneği). Örneğin, düzeyi 4 ve ATL/MFC İzleme Aracı'nı düzey 0 olarak ayarlarsanız iletiyi görmezsiniz. düzeyi 0, 1, 2, 3 veya 4 olabilir. Varsayılan değer olan 0, yalnızca en ciddi sorunları bildirir.

kategori parametresi, ayarlanacağı izleme bayraklarını listeler. Bu bayraklar, raporlamak istediğiniz yöntem türlerine karşılık gelir. Aşağıdaki tablolarda, kategori parametresi için kullanabileceğiniz geçerli izleme bayrakları listelenmiştir.

ATL İzleme Bayrakları

ATL Kategorisi Açıklama
atlTraceGeneral Tüm ATL uygulamalarıyla ilgili raporlar. Varsayılan.
atlTraceCOM COM yöntemleriyle ilgili raporlar.
atlTraceQI QueryInterface çağrıları hakkında raporlar.
atlTraceRegistrar Nesnelerin kaydıyla ilgili raporlar.
atlTraceRefcount Başvuru sayısını değiştirmeyle ilgili raporlar.
atlTraceWindowing Windows yöntemleriyle ilgili raporlar; örneğin, geçersiz bir ileti eşleme kimliği bildirir.
atlTraceControls Denetimler hakkında raporlar; örneğin, bir denetim veya penceresi yok edildiğinde raporlar.
atlTraceHosting İletileri barındıran raporlar; örneğin, kapsayıcıdaki bir istemci etkinleştirildiğinde raporlar.
atlTraceDBClient OLE DB Tüketici Şablonu raporları; Örneğin, GetData çağrısı başarısız olduğunda çıkış HRESULT içerebilir.
atlTraceDBProvider OLE DB Sağlayıcı Şablonu ile ilgili raporlar; örneğin, sütun oluşturma işleminin başarısız olup olmadığını raporlar.
atlTraceSnapin MMC SnapIn uygulaması için raporlar.
atlTraceNotImpl Belirtilen işlevin uygulanmadığını bildirir.
atlTraceAllocation atldbgmem.h dosyasındaki bellek hata ayıklama araçları tarafından yazdırılan iletileri raporlar.

MFC İzleme Bayrakları

MFC Kategorisi Açıklama
traceAppMsg Genel amaçlı, MFC iletileri. Her zaman önerilir.
traceDumpContext CDumpContext'ten gelen iletiler.
traceWinMsg MFC'nin ileti işleme kodundan gelen iletiler.
traceMemory MFC'nin bellek yönetimi kodundan gelen iletiler.
traceCmdRouting MFC'nin Windows komut yönlendirme kodundan gelen iletiler.
traceHtml MFC'nin DHTML iletişim kutusu desteğinden iletiler.
traceSocket MFC'nin yuva desteğinden gelen iletiler.
traceOle MFC'nin OLE desteğinden gelen iletiler.
traceDatabase MFC'nin veritabanı desteğinden gelen iletiler.
traceInternet MFC'nin İnternet desteğinden gelen iletiler.

Özel bir izleme kategorisi bildirmek için sınıfın CTraceCategory genel örneğini aşağıdaki gibi bildirin:

CTraceCategory MY_CATEGORY(_T("MyCategoryName"), 1);

Bu örnekte MY_CATEGORY kategori adı, kategori parametresine belirttiğiniz addır. İlk parametre, ATL/MFC İzleme Aracı'nda görünecek kategori adıdır. İkinci parametre varsayılan izleme düzeyidir. Bu parametre isteğe bağlıdır ve varsayılan izleme düzeyi 0'dır.

Kullanıcı tanımlı bir kategori kullanmak için:

ATLTRACE2(MY_CATEGORY, 2, _T("a message in a custom category"));

İzleme iletilerini filtrelemek istediğinizi belirtmek için, bu makroların tanımlarını deyiminden #include <atlbase.h> önce Stdafx.h'ye ekleyin.

Alternatif olarak, filtreyi Özellik Sayfaları iletişim kutusundaki ön işlemci yönergelerinde ayarlayabilirsiniz. Önişlemci sekmesine tıklayın ve ardından geneli Önişlemci Tanımları düzenleme kutusuna ekleyin.

Atlbase.h, ATLTRACE2 makrolarının varsayılan tanımlarını içerir ve atlbase.h işlenmeden önce bu simgeleri tanımlamazsanız bu tanımlar kullanılır.

Yayın derlemelerinde, ATLTRACE2 derlemelerini olarak derler (void) 0.

ATLTRACE2, döküm cihazına gönderilecek dizenin içeriğini biçimlendirmeden sonra en fazla 1023 karakterle sınırlar.

ATLTRACE ve ATLTRACE2 aynı davranışa sahiptir, ATLTRACE geriye dönük uyumluluk için dahil edilir.

Örnek

int i = 1;
ATLTRACE2(atlTraceGeneral, 4, "Integer = %d\n", i);
// Output: 'Integer = 1'

Ayrıca bkz.

Makrolar
Hata Ayıklama ve Hata Raporlama Genel İşlevleri