Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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'