Suivi de référence d’objet
La fonctionnalité Suivi de référence d’objet enregistre des traces de pile séquentielles chaque fois qu’un compteur de référence d’objet est incrémenté ou décrémenté. Les traces peuvent vous aider à détecter les erreurs de référence d’objet, notamment le double déréférencement, l’échec de la référence et l’échec de la déréférencement des objets. Cette fonctionnalité est prise en charge uniquement dans Windows Vista et les versions ultérieures de Windows.
Pour plus d’informations sur la configuration de la fonctionnalité de suivi de référence d’objet dans la boîte de dialogue Indicateurs globaux , consultez Configuration du suivi de référence d’objet. Pour plus d’informations sur la configuration de la fonctionnalité de suivi de référence d’objet à l’invite de commandes, consultez Commandes GFlags. Pour obtenir un exemple, consultez Exemple 15 : Utilisation du suivi de référence d’objet.
Les traces de référence d’objet sont particulièrement utiles quand vous soupçonnez qu’un objet particulier n’est pas référencé ou déréférencé correctement, généralement parce que l’utilisation accrue du pool indique qu’un objet fuit, ou qu’un processus ou une session ne peut pas être terminé, même si son nombre de handles est égal à zéro. Contrairement aux traces enregistrées dans les journaux pour une révision ultérieure, les traces de référence d’objet sont conçues pour être utilisées en temps réel, pendant que le processus est en cours d’exécution et que l’objet est référencé et déréférencé. Vous affichez une trace de référence d’objet dans le débogueur à l’aide de l’extension de débogueur !obtrace. Étant donné que cette extension nécessite une adresse d’objet spécifiée, vous devez savoir à l’avance quel objet est la source probable de l’erreur.
Les règles suivantes s’appliquent au suivi de référence d’objet :
Vous ne pouvez exécuter qu’une seule trace de référence d’objet à la fois.
Étant donné qu’une trace à l’échelle du noyau n’est pas pratique, vous devez limiter la trace aux objets créés avec des balises de pool spécifiées, ou aux objets créés par un processus spécifié (indiqué par un nom de fichier image), ou les deux.
Vous ne pouvez spécifier qu’un seul fichier image pour chaque trace. Si vous spécifiez un fichier image, la trace est limitée aux objets créés par les processus que l’image représente. Les objets référencés par le processus, mais créés par un autre processus, ne sont pas suivis.
Vous pouvez spécifier un maximum de 16 balises de pool pour chaque trace. Les objets avec l’une des balises de pool spécifiées sont suivis.
Si vous spécifiez à la fois un fichier image et une ou plusieurs balises de pool, la trace est limitée aux objets créés par le processus et qui ont l’une des balises de pool spécifiées.
Le suivi de référence d’objet ne peut pas suivre les processus qui sont déjà en cours d’exécution lorsqu’une trace est démarrée. La trace inclut uniquement les objets des processus qui démarrent après le début de la trace.
Les objets marqués pour le traçage sont suivis jusqu’à ce que l’objet soit détruit ou désactivé. Par défaut, les traces d’un objet ne sont conservées que jusqu’à ce que l’objet soit détruit, mais vous pouvez spécifier une trace « permanente » (/p) où la trace est conservée jusqu’à ce que le suivi soit désactivé.
Vous pouvez stocker la configuration du suivi de référence d’objet en tant que paramètre de Registre ou indicateur de noyau (exécution). Si vous avez des paramètres d’indicateur de registre et de noyau, les paramètres d’exécution sont prioritaires, mais sont perdus lorsque vous arrêtez ou redémarrez l’ordinateur.