_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 매크로 빛에 이러한 버그를 가져올 수 있습니다.