Condividi tramite


_ATL_DEBUG_INTERFACES

Prima di definire questa macro inclusi tutti i file di intestazione ATL per rilevare tutte le chiamate Release e AddRef le interfacce dei componenti nella finestra di output.

#define _ATL_DEBUG_INTERFACES

Note

L'output di traccia verrà visualizzato come illustrato di seguito:

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

La prima parte di ogni analisi verrà sempre ATL: QIThunk. Successivamente sarà un valore che identifica il thunk dell'interfaccia utilizzato. Un thunk dell'interfaccia è un oggetto utilizzato per mantenere il conteggio dei riferimenti e fornire la funzionalità di traccia utilizzata. Un nuovo thunk di interfaccia viene creato su ogni chiamata a QueryInterface fatta eccezione per le richieste per l'interfaccia IUnknown (in questo caso, lo stesso thunk viene restituito ogni volta in conformità alle regole di identità COM).

Una volta visualizzato AddRef o un'indicazione Release il metodo è stato chiamato. Seguendo questa operazione, verrà visualizzato un valore identificare l'oggetto di cui il conteggio dei riferimenti dell'interfaccia è stato modificato. Il valore rintracciato è il puntatore this dell'oggetto.

Il conteggio dei riferimenti che è rintracciato è il conteggio dei riferimenti nel thunk dopo AddRef o Release è stato chiamato. Si noti che il conteggio dei riferimenti non deve corrispondere al conteggio dei riferimenti per l'oggetto. Ogni thunk mantiene il relativo conteggio dei riferimenti per consentire completamente a rispettare le regole di conteggio dei riferimenti COM.

Informazione finale analizzata è il nome dell'oggetto e dell'interfaccia interessati dalla chiamata Release o AddRef.

Tutte le perdite dell'interfaccia rilevate quando il server ha interrotto e _Module.Term viene chiamato saranno registrate come segue:

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

Informazioni fornite in questo argomento vengono mappati direttamente alle informazioni fornite nelle istruzioni di traccia precedenti, pertanto è possibile esaminare i conteggi dei riferimenti durante l'intera durata di un thunk dell'interfaccia. Inoltre, ottenere un'indicazione del conteggio dei riferimenti massimo sul thunk dell'interfaccia.

Nota

_ATL_DEBUG_INTERFACES può essere utilizzato nelle build per la vendita.

Suggerimenti

  • È possibile visualizzare quando un nuovo thunk di interfaccia viene creato cercare chiamate AddRef con Refcount di 1.

  • È possibile visualizzare quando un thunk di interfaccia viene eliminato dalle chiamate Release con Refcount di 0.

  • Le istruzioni di traccia vengono restituite in un formato separato pertanto è possibile tagliare e incollare le informazioni in un foglio di calcolo di Microsoft Excel come fornire un filtro avanzate, ricerca e ordinamento le funzionalità.

  • Se il codice viene eseguito in modo corretto quando _ATL_DEBUG_INTERFACES non è definito, ma causa delle violazioni di accesso quando la macro viene definita, quasi certamente si dispone di un bug non corrispondenti di conteggio dei riferimenti nel codice client, simile a quello riportato di seguito:

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

    Questo codice può essere eseguito in alcune situazioni ordinarie, ma è chiaramente con errori. Affinché il codice funzioni a tutti, si basa sui dettagli di implementazione dell'oggetto COM che fornisce l'interfaccia IBug (IBug non può essere distribuito come un'interfaccia tear-off) e viene posizione- dipendente (il client deve essere nello stesso apartment dell'implementazione IBug ). L'utilizzo della macro _ATL_DEBUG_INTERFACES può contenere questi bug per illuminarsi.

Vedere anche

Altre risorse

Debugging and Error Reporting Macros

Macro ATL