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] printf
Dö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'