_ATL_DEBUG_INTERFACES
Definovat toto makro před včetně záhlaví souborů ATL sledovat všechny AddRef a vydání volá rozhraní komponenty serveru výstupní okno.
#define _ATL_DEBUG_INTERFACES
Poznámky
Výstup trasování se zobrazí, jak je ukázáno níže:
ATL: QIThunk - 2008 AddRef : Object = 0x00d81ba0 Refcount = 1 CBug - IBug
První část každé trasování bude vždy ATL: QIThunk .Dále je hodnota identifikující zvláštní jádro rozhraní používán.Jádro rozhraní je objekt sloužící k udržení počet odkazů a poskytovat funkce trasování zde.Nové rozhraní jádro je vytvořen při každém volání do QueryInterface s výjimkou žádostí IUnknown rozhraní (v tomto případě stejné jádro je vrácena při každém dodržovat pravidla identity modelu COM).
Dále uvidíte AddRef nebo vydání označující, která metoda byla volána.Po, která zobrazí hodnotu identifikace objektu, jehož počet odkazů rozhraní byl změněn.Hodnota sledována této ukazatel na objekt.
Počet odkazů, která je sledována je počet odkazů na toto jádro po AddRef nebo vydání byla volána.Všimněte si, že tento počet odkazů nemusí odpovídat počet odkazů pro objekt.Každé jádro udržuje vlastní počet odkazů vám plně dodržovat pravidla počítání odkazů modelu COM.
Poslední část informací vysledovat je název objektu a rozhraní ovlivněny AddRef nebo vydání volání.
Žádné rozhraní těsnost, které jsou zjištěny při vypnutí serveru a _Module.Term se nazývá budou protokolovány takto:
ATL: QIThunk - 2005 LEAK : Object = 0x00d81ca0 Refcount = 1 MaxRefCount = 1 CBug - IBug
Informace zde uvedené přímo na informace poskytnuté v předchozích příkazech trace map, takže můžete zkontrolovat odkaz počítá během celé doby životnosti jádro rozhraní.Kromě toho získat označení maximálního počtu odkazů na jádro tohoto rozhraní.
[!POZNÁMKA]
_ATL_DEBUG_INTERFACESlze v maloobchodních sestavení.
Tipy
V tématu Vytvoření nového rozhraní jádro vyhledávání podle AddRef volání s Refcount 1.
Uvidíte, když je zničeno jádro rozhraní vyhledávání podle Release volání s Refcount 0.
Na příkazech trace jsou výstup ve formátu tabulátorem, takže snadno vyjmout a vložit do tabulky, například Microsoft Excel poskytovat rozšířené filtrování, vyhledávání a třídění schopnosti.
Pokud váš kód jemné při práci _ATL_DEBUG_INTERFACES není definována, ale způsobuje narušení přístupu při definování makra, téměř jistě máte neodpovídající chybou počítání odkazů v kódu klienta, podobné následujícím:
IBug* pBug = NULL; hr = p->QueryInterface(&pBug); ATLASSERT(SUCCEEDED(hr)); IBug* pBug2 = NULL; hr = p->QueryInterface(&pBug2); ATLASSERT(SUCCEEDED(hr)); pBug->Release(); pBug->Release(); // Mismatched - should be pBug2->Release();
Toto může být za určitých okolností společné práce, ale je jasně buggy.Tento kód vůbec vychází podrobnosti implementace poskytování objektu COM IBug rozhraní ( IBug nelze implementovat rozhraní odtrhnout) a je závislá na umístění (klient musí být ve stejné byt jako IBug implementace).Použití _ATL_DEBUG_INTERFACES makro lze přenést tyto chyby na světlo.