Share via


_ATL_DEBUG_INTERFACES

Définissez cette macro pour inclure tous les fichiers d'en-tête ATL pour suivre tous les AddRef et appel de Release aux interfaces des composants dans la fenêtre Sortie.

#define _ATL_DEBUG_INTERFACES

Notes

La sortie de trace apparaît comme indiqué ci-dessous :

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

La première partie de chaque trace sera toujours ATL: QIThunk.Est ensuite une valeur identificateur la conversion de code d'interface particulière utilisée.Un thunk d'interface est un objet utilisé pour mettre à jour un décompte de références et pour fournir la capacité de suivi utilisée ici.Une nouvelle conversion de code d'interface est créée à chaque appel à QueryInterface à l'exception de les demandes pour l'interface d' IUnknown (dans ce cas, la même thunk est retournée à chaque fois soit conforme aux règles de l'identité COM).

Ensuite vous verrez AddRef ou indiquer de Release la méthode a été appelée.Suivant place, vous verrez une valeur identificateur l'objet dont le décompte de références d'interface a été modifié.La valeur est suivie le pointeur de this de l'objet.

Le décompte de références suivi est le décompte de références sur cette conversion de code après AddRef ou Release a été appelé.Notez que ce nombre de références peut ne pas correspondre au nombre de références de l'objet.Chaque conversion de code met à jour son propre décompte de références pour vous aider entièrement à se conformer aux règles de comptage COM.

Les informations finale est suivie du nom de l'objet et l'interface affecté par AddRef ou l'appel de Release .

Toutes les fuites de l'interface qui sont détectées lorsque le serveur arrête et _Module.Term est appelé seront signalées comme suit :

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

Les informations fournies ici correspondent directement aux informations fournies dans les instructions de traçage précédentes, vous pouvez examiner le nombre de références pendant toute la durée de vie entière d'un thunk d'interface.De plus, vous obtenez une indication du nombre de références maximale sur cette conversion de code d'interface.

[!REMARQUE]

_ATL_DEBUG_INTERFACES peut être utilisé dans les versions commerciales.

Conseils

  • Vous pouvez afficher lorsqu'une nouvelle conversion de code d'interface est créée en recherchant des appels d' AddRef avec Refcount de 1.

  • Vous pouvez déterminer si une conversion de code d'interface est perdue en recherchant des appels d' Release avec Refcount de 0.

  • Les instructions de traçage sont sorties dans un format onglet- séparé vous pouvez facilement couperer-coll des informations dans un tableur tel que Microsoft Excel pour fournir le filtrage avancées, rechercher, et trier des fonctions.

  • Si votre code semble s'exécuter correctement lorsque _ATL_DEBUG_INTERFACES n'est pas défini, mais provoque des violations d'accès lorsque la macro est définie, vous êtes presque certainement un bogue incompatible de décompte de références de votre code client, semblable à celui illustré ci-dessous :

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

    Ce code peut sembler s'exécuter dans certaines situations courantes, mais il est clairement avec des erreurs.Pour que ce code fonctionne du tout, il repose sur des détails d'implémentation de l'objet COM fournissant l'interface d' IBug (IBug ne peut pas être implémenté comme une interface volante) et c'est emplacement- dépendant (le client doit figurer dans le même apartment (cloisonné) que l'implémentation d' IBug ).L'utilisation de la macro d' _ATL_DEBUG_INTERFACES peut mettre de ces bogues en évidence.

Voir aussi

Autres ressources

Macros de débogage et de rapport d'erreurs

Macros ATL