Udostępnij za pośrednictwem


_ATL_DEBUG_INTERFACES

Określenie to makro przed łącznie z plikami nagłówka ATL śledzenie wszystkich AddRef i wersji wzywa interfejsów użytkownika składników w oknie dane wyjściowe.

#define _ATL_DEBUG_INTERFACES

Uwagi

Wynik śledzenia pojawi się, jak pokazano poniżej:

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

Pierwsza część każdego śledzenia będzie zawsze ATL: QIThunk.Dalej jest identyfikowanie określonej wartości thunk interfejsu używany.Thunk interfejsu jest używana do utrzymania licznika odwołań i zapewnienia możliwości śledzenia używane tutaj obiekt.Nowe thunk interfejsu jest tworzony dla każdego wywołania do QueryInterface z wyjątkiem żądań dla IUnknown interfejsu (w przypadku samej thunk jest zwracany każdym z regułami tożsamości modelu COM).

Następny wyświetlony AddRef lub wersji wskazująca, która metoda została wywołana.Po zostanie wyświetlona wartość identyfikacji obiektu, którego interfejs licznika odwołań zostało zmienione.Wartość śledzone jest to wskaźnik obiektu.

Liczbę odwołań, który jest śledzony jest licznika odwołań w tym thunk po AddRef lub wersji została wywołana.Uwaga tego licznika odwołań może nie odpowiadać licznika odwołań do obiektu.Każdy thunk utrzymuje własny licznika odwołań, aby pomóc w pełni zgodne z zasadami zliczania odwołanie modelu COM.

Końcowe fragment informacji śledzone jest nazwa obiektu i interfejsu zagrożone przez AddRef lub wersji wywołania.

Żadnego interfejsu nieszczelności, które są wykrywane podczas wyłączania serwera i _Module.Term jest nazywany będą rejestrowane w następujący sposób:

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

Informacje dostarczone w tym miejscu mapy bezpośrednio do informacji przewidzianych w poprzednim instrukcji trace, więc można sprawdzić odwołanie zlicza przez cały okres istnienia thunk interfejsu.Ponadto wskazanie maksymalną liczbę odwołań get na thunk tego interfejsu.

[!UWAGA]

_ATL_DEBUG_INTERFACESmogą być używane w detalicznych kompilacjach.

Porady

  • Zobacz temat utworzenia nowego thunk interfejsu szukając AddRef wywołuje z Refcount 1.

  • Można zobaczyć, kiedy thunk interfejsu jest niszczony, szukając Release wywołuje z Refcount 0.

  • Instrukcji trace są dane wyjściowe w formacie tabulatorem tak łatwo można wyciąć i wkleić informacje do arkusza kalkulacyjnego, jak Microsoft Excel zaawansowane filtrowanie, wyszukiwanie i sortowanie możliwości.

  • Jeśli kod wydaje się działać dobrze przy _ATL_DEBUG_INTERFACES nie jest zdefiniowany, ale powoduje naruszenie zasad dostępu, gdy makro jest zdefiniowany, niemal z pewnością mają niezgodne bug zliczania odniesienia w kodzie klienta podobny do przedstawionego poniżej:

    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();   
    

    Ten kod może pojawić się do pracy w niektórych okolicznościach wspólnej, ale jest wyraźnie wadliwego.Dla tego kodu do pracy na wszystkich opiera szczegóły implementacji obiektu COM dostarczenia IBug interfejsu (IBug nie zaimplementowane jako interfejs Odrywane) i jest zależne od lokalizacji (klient musi znajdować się w tym samym apartamencie jako IBug wykonania).Użycie _ATL_DEBUG_INTERFACES makr mogą wnieść takie błędy światła.

Zobacz też

Inne zasoby

Raportowania błędów i debugowanie makra

Makra ATL