Traccia dei riferimenti all'oggetto

La funzionalità Traccia riferimenti oggetti registra tracce sequenziali dello stack ogni volta che viene incrementato o decrementato un contatore di riferimenti a oggetti. Le tracce consentono di rilevare gli errori di riferimento degli oggetti, tra cui la dereferenza doppia, l'errore di riferimento e l'errore di dereferenza degli oggetti. Questa funzionalità è supportata solo in Windows Vista e versioni successive di Windows.

Per informazioni sulla configurazione della funzionalità Traccia riferimenti oggetti nella finestra di dialogo Flag globali , vedere Configurazione della traccia dei riferimenti a oggetti. Per informazioni sulla configurazione della funzionalità Traccia riferimenti oggetti al prompt dei comandi, vedere Comandi GFlags. Per un esempio, vedere Esempio 15: Uso della traccia dei riferimenti all'oggetto.

Le tracce di riferimento agli oggetti sono più utili quando si sospetta che un particolare oggetto non venga fatto riferimento o dereferenziato correttamente, in genere perché l'utilizzo del pool aumenta indica che un oggetto sta perdendo o che non è possibile terminare un processo o una sessione, anche se il numero di handle è zero. A differenza delle tracce registrate nei log per la revisione successiva, le tracce di riferimento agli oggetti sono progettate per essere usate in tempo reale, mentre il processo è in esecuzione e l'oggetto viene fatto riferimento e dereferenziato. È possibile visualizzare una traccia di riferimento dell'oggetto nel debugger usando l'estensione del debugger !obtrace. Poiché questa estensione richiede un indirizzo di oggetto specificato, è necessario conoscere in anticipo quale oggetto è l'origine probabile dell'errore.

Le regole seguenti si applicano alla traccia dei riferimenti a oggetti:

  • È possibile eseguire una sola traccia di riferimento dell'oggetto alla volta.

  • Poiché una traccia a livello di kernel non è pratica, è necessario limitare la traccia a oggetti creati con tag di pool specificati o a oggetti creati da un processo specificato (indicato da un nome file di immagine) o entrambi.

  • È possibile specificare un solo file di immagine per ogni traccia. Se si specifica un file di immagine, la traccia è limitata agli oggetti creati dai processi che l'immagine rappresenta. Gli oggetti a cui fa riferimento il processo, ma vengono creati da un processo diverso, non vengono tracciati.

  • È possibile specificare un massimo di 16 tag di pool per ogni traccia. Gli oggetti con uno dei tag del pool specificati vengono tracciati.

  • Se si specifica un file di immagine e uno o più tag di pool, la traccia è limitata agli oggetti creati dal processo e hanno uno dei tag del pool specificati.

  • La traccia dei riferimenti a oggetti non può tracciare i processi già in esecuzione quando viene avviata una traccia. La traccia include solo gli oggetti dei processi che iniziano dopo l'inizio della traccia.

  • Gli oggetti contrassegnati per la traccia vengono tracciati fino a quando l'oggetto non viene eliminato o la traccia è disabilitata. Per impostazione predefinita, le tracce per un oggetto vengono mantenute solo finché l'oggetto non viene eliminato, ma è possibile specificare una traccia "permanente" (/p) in cui la traccia non viene mantenuta fino a quando la traccia non viene disabilitata.

  • È possibile archiviare la configurazione di Traccia riferimenti oggetti come impostazione del Registro di sistema o un flag del kernel (run-time). Se sono presenti impostazioni del Registro di sistema e del flag del kernel, le impostazioni di runtime hanno la precedenza, ma vengono perse quando si arresta o si riavvia il computer.