Megosztás a következőn keresztül:


Hibakeresés és hibajelentési makrók

Megjegyzés:

Az aktív sablontár (ATL) továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Ezek a makrók hasznos hibakeresési és nyomkövetési lehetőségeket biztosítanak.

Név Description
_ATL_DEBUG_INTERFACES A kimeneti ablakba írja azokat a felületi szivárgásokat, amelyeket a rendszer a híváskor _Module.Term észlel.
_ATL_DEBUG_QI Minden hívást a kimeneti ablakba QueryInterface ír.
ATLASSERT Ugyanazt a funkciót hajtja végre, mint a C futásidejű kódtárban található _ASSERTE makró.
ATLENSURE Paraméterek érvényesítését hajtja végre. Szükség esetén hívás AtlThrow
ATLTRACENOTIMPL Üzenetet küld a memóriakép-kezelő eszköznek, hogy a megadott függvény nincs implementálva.
ATLTRACE Figyelmeztetéseket jelent egy kimeneti eszköznek, például a hibakereső ablaknak a jelzett jelzők és szintek szerint. A visszamenőleges kompatibilitás érdekében tartalmazza.
ATLTRACE2 Figyelmeztetéseket jelent egy kimeneti eszköznek, például a hibakereső ablaknak a jelzett jelzők és szintek szerint.

_ATL_DEBUG_INTERFACES

Definiálja ezt a makrót, mielőtt bármilyen ATL-fejlécfájlt belevennénk az összes AddRef nyomon követéséhez, és Release meghívja az összetevők interfészeit a kimeneti ablakba.

#define _ATL_DEBUG_INTERFACES

Megjegyzések

A nyomkövetési kimenet az alábbi módon jelenik meg:

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

Az egyes nyomkövetések első része mindig az lesz ATL: QIThunk. A következő egy érték, amely azonosítja a használt interfészt . A felületi adattömb egy olyan objektum, amely a hivatkozásszám fenntartására és az itt használt nyomkövetési képesség biztosítására szolgál. Minden híváshoz QueryInterface létrejön egy új felületi csonk, kivéve a IUnknown felületre vonatkozó kéréseket (ebben az esetben minden alkalommal ugyanaz a thunk lesz visszaadva, hogy megfeleljen a COM identitásszabályainak).

Ezután láthatja AddRef vagy Release jelzi, hogy melyik metódus lett meghívva. Ezt követően megjelenik egy érték, amely azonosítja azt az objektumot, amelynek a felülethivatkozásainak száma módosult. A nyomkövetési érték az this objektum mutatója.

A lekövetett hivatkozásszám az adott csonkra vonatkozó hivatkozási szám a hívás után AddRef vagy Release után. Vegye figyelembe, hogy ez a hivatkozásszám nem feltétlenül egyezik meg az objektum referenciaszámával. Minden egyes thunk saját referenciaszámot tart fenn, hogy teljes mértékben megfeleljen a COM hivatkozásszámláló szabályainak.

A nyomon követendő utolsó információ az objektum neve és a hívás által AddRefRelease érintett felület neve.

A kiszolgáló leállásakor és _Module.Term meghívásakor észlelt interfészszivárgások a következőképpen lesznek naplózva:

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

Az itt megadott információk közvetlenül az előző nyomkövetési utasításokban megadott információkhoz igazodnak, így megvizsgálhatja a referenciaszámokat egy felület teljes élettartama során. Emellett az adott interfész maximális hivatkozási számát is meg fogja jelölni.

Megjegyzés:

_ATL_DEBUG_INTERFACES kereskedelmi buildekben is használható.

_ATL_DEBUG_QI

Minden hívást a kimeneti ablakba QueryInterface ír.

#define _ATL_DEBUG_QI

Megjegyzések

Ha egy hívás QueryInterface sikertelen volt, a kimeneti ablak a következő lesz:

interfész neve - failed

ATLASSERT

Az ATLASSERT makró ugyanazt a funkciót látja el, mint a C futásidejű kódtárban található _ASSERTE makró.

ATLASSERT(booleanExpression);

Paraméterek

booleanExpression
Olyan kifejezés (beleértve a mutatókat is), amely nem 0 vagy 0 értéket ad vissza.

Megjegyzések

A hibakeresési buildekben az ATLASSERT kiértékeli a logikaiexpressziót , és hibakeresési jelentést hoz létre, ha az eredmény hamis.

Requirements

Fejléc: atldef.h

ATLENSURE

Ez a makró egy függvénynek átadott paraméterek ellenőrzésére szolgál.

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

Paraméterek

booleanExpression
A tesztelni kívánt logikai kifejezést adja meg.

hr
A visszaadandó hibakódot adja meg.

Megjegyzések

Ezek a makrók olyan mechanizmust biztosítanak, amely észleli és értesíti a felhasználót a helytelen paraméterhasználatról.

A makró meghívja az ATLASSERT-et, és ha a feltétel meghiúsul, a hívások sikertelenek lesznek AtlThrow.

Az ATLENSURE esetben AtlThrow a E_FAIL van meghívva.

Az ATLENSURE_THROW esetben AtlThrow a megadott HRESULT-tal hívjuk meg.

Az ATLENSURE és az ATLASSERT közötti különbség az, hogy az ATLENSURE kivételt jelent a Kiadási buildekben és a Hibakeresési buildekben is.

Example

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

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

Requirements

Fejléc: afx.h

ATLTRACENOTIMPL

Az ATL-buildek hibakeresésében küldje el a " funcname nincs implementálva" sztringet a memóriaképeszközre, és visszaadja a E_NOTIMPL.

ATLTRACENOTIMPL(funcname);

Paraméterek

funcname
[in] A nem implementált függvény nevét tartalmazó sztring.

Megjegyzések

A kiadási buildekben egyszerűen E_NOTIMPL ad vissza.

Example

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

Requirements

Fejléc: atltrace.h

ATLTRACE

Figyelmeztetéseket jelent egy kimeneti eszköznek, például a hibakereső ablaknak a jelzett jelzők és szintek szerint. A visszamenőleges kompatibilitás érdekében tartalmazza.

ATLTRACE(exp);

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

Paraméterek

Exp
[in] A kimeneti ablakba vagy bármely olyan alkalmazásba küldendő sztring és változók, amelyek ezeket az üzeneteket csapdába ejtik.

kategória
[in] A jelentés alapjául szolgáló esemény vagy metódus típusa. A kategóriák listájához lásd a Megjegyzések elemet.

szint
[in] A jelentéshez való nyomkövetés szintje. Részletekért tekintse meg a Megjegyzések című témakört.

lpszFormat
[in] A memóriaképeszközre küldendő formázott sztring.

Megjegyzések

Az ATLTRACE leírását lásd a ATLTRACE2 . Az ATLTRACE és a ATLTRACE2 ugyanaz a viselkedés, az ATLTRACE a visszamenőleges kompatibilitást szolgálja.

ATLTRACE2

Figyelmeztetéseket jelent egy kimeneti eszköznek, például a hibakereső ablaknak a jelzett jelzők és szintek szerint.

ATLTRACE2(exp);

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

Paraméterek

Exp
[in] A kimeneti ablakba vagy bármely olyan alkalmazásba küldendő sztring, amely ezeket az üzeneteket csapdába ejti.

kategória
[in] A jelentés alapjául szolgáló esemény vagy metódus típusa. A kategóriák listájához lásd a Megjegyzések elemet.

szint
[in] A jelentéshez való nyomkövetés szintje. Részletekért tekintse meg a Megjegyzések című témakört.

lpszFormat
[in] A printf-style formátum sztring, amellyel sztringet hozhat létre a memóriaképeszközre küldendő sztring létrehozásához.

Megjegyzések

A ATLTRACE2 rövid formája sztringet ír a hibakereső kimeneti ablakába. A ATLTRACE2 második formája szintén a hibakereső kimeneti ablakába írja a kimenetet, de az ATL/MFC nyomkövetési eszköz beállításai vonatkoznak rá (lásd az ATLTraceTool-mintát). Ha például a 4 . szintet állítja be, az ATL/MFC nyomkövetési eszközt pedig a 0. szintre, akkor az üzenet nem jelenik meg. szint lehet 0, 1, 2, 3 vagy 4. Az alapértelmezett 0 csak a legsúlyosabb problémákat jelenti.

A kategóriaparaméter felsorolja a beállítandó nyomkövetési jelzőket. Ezek a jelzők azoknak a metódusoknak a típusainak felelnek meg, amelyekről jelentést szeretne készíteni. Az alábbi táblázatok felsorolják a kategóriaparaméterhez használható érvényes nyomkövetési jelzőket.

ATL nyomkövetési jelzők

ATL-kategória Description
atlTraceGeneral Jelentések az összes ATL-alkalmazásról. Az alapértelmezett érték.
atlTraceCOM Jelentések COM-metódusokról.
atlTraceQI Jelentések a QueryInterface-hívásokról.
atlTraceRegistrar Jelentések az objektumok regisztrálásáról.
atlTraceRefcount Jelentések a hivatkozásszám módosításáról.
atlTraceWindowing Jelentések windowsos metódusokról; például érvénytelen üzenettérkép-azonosítót jelent.
atlTraceControls Jelentések a vezérlőkről; például jelenti, ha egy vezérlő vagy ablaka megsemmisül.
atlTraceHosting Üzeneteket üzemeltető jelentések; például jelenti, ha egy tárolóban lévő ügyfél aktiválva van.
atlTraceDBClient Jelentések az OLE DB fogyasztói sablonról; Ha például a GetData hívása meghiúsul, a kimenet tartalmazhatja a HRESULT-t.
atlTraceDBProvider Jelentések az OLE DB szolgáltatói sablonról; ha például egy oszlop létrehozása sikertelen volt.
atlTraceSnapin Jelentések az MMC SnapIn-alkalmazáshoz.
atlTraceNotImpl Azt jelenti, hogy a jelzett függvény nincs implementálva.
atlTraceAllocation Az atldbgmem.h memóriakeresési eszközei által kinyomtatott üzeneteket jelenti.

MFC nyomkövetési jelzők

MFC-kategória Description
traceAppMsg Általános célú, MFC-üzenetek. Mindig ajánlott.
traceDumpContext CDumpContext üzenetei.
traceWinMsg Üzenetek az MFC üzenetkezelő kódjából.
traceMemory Üzenetek az MFC memóriakezelési kódjából.
traceCmdRouting Üzenetek az MFC Windows-parancs-útválasztási kódjából.
traceHtml Az MFC DHTML párbeszédpaneljének üzenetei támogatottak.
traceSocket Üzenetek az MFC szoftvercsatornájának támogatásából.
traceOle Az MFC OLE-támogatásának üzenetei.
traceDatabase Az MFC adatbázis-támogatásának üzenetei.
traceInternet Az MFC internettámogatásának üzenetei.

Egyéni nyomkövetési kategória deklarálásához deklarálja az osztály globális példányát az CTraceCategory alábbiak szerint:

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

Ebben a példában MY_CATEGORY kategórianév a kategóriaparaméterhez megadott név. Az első paraméter az ATL/MFC nyomkövetési eszközben megjelenő kategórianév. A második paraméter az alapértelmezett nyomkövetési szint. Ez a paraméter nem kötelező, és az alapértelmezett nyomkövetési szint 0.

Felhasználó által definiált kategória használata:

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

Ha meg szeretné adni, hogy szűrni szeretné a nyomkövetési üzeneteket, szúrjon be definíciókat ezekhez a makrókhoz az Stdafx.h-ba az #include <atlbase.h> utasítás előtt.

Másik lehetőségként beállíthatja a szűrőt az előfeldolgozási irányelvekben a Tulajdonságlapok párbeszédpanelen. Kattintson az Előfeldolgozó fülre, majd szúrja be a globálist az Előfeldolgozó-definíciók szerkesztőmezőbe.

Az Atlbase.h a ATLTRACE2 makrók alapértelmezett definícióit tartalmazza, és ezek a definíciók akkor lesznek használatban, ha nem definiálja ezeket a szimbólumokat az atlbase.h feldolgozása előtt.

A kiadási buildekben ATLTRACE2 a következőre fordítja le a következőt (void) 0: .

ATLTRACE2 formázás után legfeljebb 1023 karakterre korlátozza a memóriaképeszközre küldendő sztring tartalmát.

Az ATLTRACE és a ATLTRACE2 ugyanaz a viselkedés, az ATLTRACE a visszamenőleges kompatibilitást szolgálja.

Example

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

Lásd még

Makrók
Hibakeresés és hibajelentés globális függvények