_ATL_DEBUG_INTERFACES
Definir esta macro antes de incluir quaisquer arquivos de cabeçalho ATL para rastrear todos os AddRef e Versão chama em interfaces de seus componentes para a janela de saída.
#define _ATL_DEBUG_INTERFACES
A saída do rastreamento aparecerá sistema autônomo mostrado abaixo:
ATL: QIThunk - 2008 AddRef : Object = 0x00d81ba0 Refcount = 1 CBug - IBug
A primeira parte do rastreamento de cada sempre será ATL: QIThunk. A seguir está um valor identificando a determinado conversão de interface que está sendo usado.Uma conversão de interface é um objeto usado para manter uma contagem de referência e fornecem o recurso de rastreamento usado aqui.Uma nova conversão de interface é criado em cada telefonar para QueryInterface exceto para as solicitações para o IUnknown interface (nesse caso, a mesma conversão é retornada sempre em conformidade com regras de identidade do COM).
Em seguida, você verá AddRef ou Versão que indica qual método foi chamado.Em seguida, você verá um valor identificando o objeto cuja contagem de referência da interface foi alterada.O valor rastreado é o Isso o ponteiro do objeto.
A contagem de referência que é rastreada é a contagem de referência que conversão após AddRef ou Versão foi chamado.Observe que a contagem de referência não pode corresponder a contagem de referência para o objeto.Cada conversão mantém seu próprio contagem de referência para ajudar você a obedecer as regras de contagem de referência COM.
A parte final de informação rastreada é o nome do objeto e a interface que estão sendo afetados pelo AddRef ou Versão telefonar.
Qualquer interface vazamentos que são detectados quando o servidor for desligado e _Module.Term é chamado irá efetuar logon como este:
ATL: QIThunk - 2005 LEAK : Object = 0x00d81ca0 Refcount = 1 MaxRefCount = 1 CBug - IBug
As informações fornecidas aqui é mapeado diretamente para as informações fornecidas nas instruções de rastreamento anterior, para que você possa examinar a referência de conta em todo o ciclo de vida inteiro de uma conversão de interface.Além disso, você recebe uma indicação de que a contagem de referência máxima no conversão dessa interface.
Observação: |
---|
_ATL_DEBUG_INTERFACES pode ser usado em compilações comerciais. |
Você pode ver que é criada uma nova conversão de interface procurando por AddRef chamadas com um Refcount 1.
Você pode ver quando uma conversão de interface é destruído pelo procurando Release chamadas com um Refcount 0.
sistema autônomo instruções de rastreamento são saída em um formato separados por tabulações para que você possa recortar e colar sistema autônomo informações em uma planilha sistema autônomo o Microsoft Excel para fornecer filtragem avançada, pesquisa e classificação recursos com com facilidade.
Se seu código parece funcionar bem quando _ATL_DEBUG_INTERFACES não é definida, mas causa violações de acesso quando a macro for definida, você certamente tem um bug de contagem de referência não correspondente no código do cliente, semelhante ao mostrado abaixo:
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();
Esse código pode parecer funcionar em algumas circunstâncias comuns, mas é claramente com bugs.Para que este código funciona, ele conta com detalhes de implementação do objeto COM, fornecendo o IBug interface)IBug não pode ser implementado sistema autônomo uma subdivisão - desativar interface) e é dependente de local (o cliente deve estar no mesmo apartment sistema autônomo o IBug implementação). Uso do _ATL_DEBUG_INTERFACES macro pode trazer esses bugs à luz.