다음을 통해 공유


_ATL_DEBUG_INTERFACES

모든 추적 ATL 헤더 파일을 포함 하기 전에이 매크로 정의 AddRef릴리스 출력 창에는 구성 요소 인터페이스를 호출 합니다.

#define _ATL_DEBUG_INTERFACES

설명

추적 출력은 아래와 같이 나타납니다.

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

각 추적의 첫 부분이 항상 수 ATL: QIThunk.다음 특정 식별 하는 값입니다. 썽크 인터페이스 사용 하 고 있습니다.인터페이스 썽크는 개체 참조 카운트를 유지 하 고 여기에 사용 되는 추적 기능을 제공 하는 데 사용 됩니다.새 인터페이스 썽크를 호출할 때마다 만들어집니다 QueryInterface 요청을 제외 하 고는 IUnknown 인터페이스 (이 경우 같은 썽크 때마다 COM의 식별 규칙을 준수 하도록 반환 됩니다).

다음 볼 수 AddRef 또는 릴리스 나타내는 메서드를 호출 했습니다.그런 다음 해당 인터페이스의 참조 횟수를 변경 된 개체를 식별 하는 값을 표시 됩니다.추적 값을 개체의 포인터.

그 후 썽크의 참조 횟수 추적 된 참조 횟수입니다 AddRef 또는 릴리스 호출 되었습니다.참고가 참조 횟수 개체에 대 한 참조 횟수와 일치 될 수 있습니다.각 썽크 COM 참조 횟수 규칙을 완벽 하 게 준수 하는 데 도움이 되는 자체 참조 카운트를 유지 합니다.

마지막 추적 정보에서 영향을 받는 인터페이스 개체의 이름입니다는 AddRef 또는 릴리스 를 호출 합니다.

서버가 종료 될 때 발견 되는 누수 된 인터페이스 및 _Module.Term 마법 이라고 다음과 같이 기록 될:

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

여기 제공 된 정보 제공 이전 추적 문에서 정보를 직접 지도, 검사할 수 있도록 인터페이스 썽크는 전체 수명 동안 참조를 구합니다.또한 해당 인터페이스 썽크를 최대 참조 개수를 나타내는 값을 볼 수 있습니다.

[!참고]

_ATL_DEBUG_INTERFACES일반 정품 빌드에 사용할 수 있습니다.

  • 확인에 대 한 새 인터페이스 썽크 만들 때 볼 수 AddRef 를 호출 하는 Refcount 1.

  • 인터페이스 썽크를 찾고 여 소멸 될 때 볼 수 Release 를 호출 하는 Refcount 0.

  • 추적 문을 탭 구분 형식으로 출력 되므로 쉽게 잘라내어 고급 필터링, 검색 및 정렬 기능을 제공 하려면 Microsoft Excel과 같은 스프레드시트에서 정보를 붙여넣을 수 있습니다.

  • 코드 작동 미세 때 같으면 _ATL_DEBUG_INTERFACES 정의 되지 않은 클라이언트 코드를 아래와 비슷한 참조 횟수는 일치 하지 않는 버그를 거의 확실 하 게 해야 하지만 매크로 정의 하는 경우 액세스 위반 원인:

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

    명확 하 게 버그가 있는 것이 코드 몇 가지 일반적인 상황에서 작동 하도록 나타날 수 있습니다.이 코드를 작동 하려면이 제공 하는 COM 개체의 구현 세부 사항에 의존의 IBug 인터페이스 (IBug 분리 된 인터페이스를 구현할 수 없습니다) 및이 위치에 따라 다릅니다 (클라이언트와 동일한 아파트에 있어야는 IBug 구현).사용은 _ATL_DEBUG_INTERFACES 매크로 빛에 이러한 버그를 가져올 수 있습니다.

참고 항목

기타 리소스

디버깅 및 오류 보고 매크로

ATL 매크로