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.