Condividi tramite


Esempio 15: Utilizzo della traccia dei riferimenti a oggetti

Traccia riferimento oggetti è una funzionalità di Windows che registra un'analisi dello stack sequenziale quando un oggetto viene fatto riferimento o dereferenziato. È progettato per rilevare gli errori nella gestione degli oggetti che possono causare arresti anomali o perdite di memoria. Alcuni di questi errori sono difficili da rilevare perché non vengono visualizzati in modo coerente. Per informazioni dettagliate, vedere Analisi dei riferimenti agli oggetti.

È possibile configurare La traccia dei riferimenti a oggetti usando la finestra di dialogo Flag globali o al prompt dei comandi. Gli esempi seguenti usano il prompt dei comandi. Per informazioni sull'utilizzo della finestra di dialogo Flag globali per configurare la traccia di riferimento agli oggetti, vedere Configuring Object Reference Tracing.

È possibile usare Gflags per abilitare, disabilitare e configurare Traccia riferimento oggetti. Passaggi del processo:

  • Usare Gflags per abilitare La traccia di riferimento oggetti nel Registro di sistema o come impostazione del flag del kernel (runtime). Se si aggiunge l'impostazione al Registro di sistema, è necessario riavviare il computer per avviare la traccia. Se si abilita la versione di runtime delle impostazioni, la traccia viene avviata immediatamente, ma le impostazioni di traccia vengono ripristinate quando si arresta o si riavvia il computer.

  • Avviare il processo che crea l'oggetto sospetto. La traccia include solo gli oggetti creati dai processi avviati dopo l'inizio della traccia. Se il processo viene avviato durante o poco dopo il riavvio, aggiungere le impostazioni di traccia al Registro di sistema e quindi riavviare il sistema.

  • Usare l'estensione del debugger !obtrace per visualizzare la traccia. Per impostazione predefinita, la traccia viene mantenuta fino a quando l'oggetto non viene eliminato definitivamente, ma è possibile usare il parametro /p per mantenere la traccia fino a quando la traccia non viene disabilitata.

  • Usare Gflags per disabilitare Object Reference Tracing.nel Registro di sistema o come impostazione del flag del kernel (runtime). Se si elimina l'impostazione dal Registro di sistema, è necessario riavviare il computer per terminare la traccia. Se si disabilita la versione di runtime delle impostazioni, la traccia termina immediatamente, ma le impostazioni di traccia vengono ripristinate quando si arresta o si riavvia il computer.

Questi esempi illustrano come usare Gflags per abilitare e disabilitare la traccia dei riferimenti agli oggetti. \

Abilitare la traccia in fase di esecuzione

Il comando seguente abilita Traccia riferimento oggetti al prompt dei comandi. Il comando usa il /ko parametro per abilitare l'impostazione Traccia riferimento oggetti come flag del kernel (runtime). Il comando usa il parametro /t per specificare i tag del pool Tag1 e Fred. Di conseguenza, tutti gli oggetti creati con Tag1 o Fred vengono tracciati.

gflags /ko /t Tag1;Fred

Poiché il comando modifica le impostazioni del flag del kernel (runtime), la traccia dei riferimenti agli oggetti viene avviata immediatamente. La traccia includerà tutti gli oggetti con i tag del pool Tag1 o Fred creati dai processi che iniziano dopo l'invio del comando.

Gflags risponde stampando il messaggio seguente:

Running Kernel Settings :
Object Ref Tracing Enabled
        Temporary Traces
        Pool Tags: Tag1;Fred
        Process Name: All Processes

Questo messaggio indica che la traccia dei riferimenti a oggetti è abilitata. "Tracce temporanee" indica che tutti i record della traccia vengono eliminati quando l'oggetto viene eliminato definitivamente. Per rendere permanente la traccia, usare il parametro /p , che indica a Windows di conservare i dati di traccia fino a quando la traccia di riferimento oggetti non è disabilitata o il computer viene arrestato o riavviato.

Abilitare la traccia nel Registro di sistema

Il comando seguente aggiunge una configurazione di Traccia riferimento oggetti al Registro di sistema. La traccia configurata inizia quando si riavvia il computer.

Il comando usa il /ro parametro per abilitare Traccia riferimento oggetti come impostazione del Registro di sistema. Il comando usa / i per specificare il processo per notepad.exe e il parametro /t per specificare i tag del pool Tag1 e Fred. Di conseguenza, tutti gli oggetti creati dal processo blocco note con i tag del pool Tag1 o Fred vengono tracciati. Il comando usa anche il parametro /p , che mantiene i dati di traccia fino a quando la traccia non viene disabilitata.

gflags /ro /t Tag1;Fred /i Notepad.exe /p

Quando si invia il comando, Gflags archivia le informazioni nel Registro di sistema. Tuttavia, poiché le impostazioni del Registro di sistema non sono valide fino al riavvio del computer, questa traccia di riferimento agli oggetti è configurata, ma non è ancora stata avviata.

Gflags risponde stampando il messaggio seguente:

Boot Registry Settings :
Object Ref Tracing Enabled
        Permanent Traces
        Pool Tags: Tag1;Fred
        Process Name: Notepad.exe

Il messaggio indica che la traccia di riferimento oggetto è abilitata nel Registro di sistema. "Tracce permanenti" indica che i dati di traccia verranno conservati fino a quando non si arresta o si riavvia il computer. Il messaggio elenca anche i tag del pool e i nomi dei file di immagine che verranno tracciati.

Visualizzare la configurazione della traccia dei riferimenti agli oggetti

È possibile visualizzare la configurazione di Traccia riferimenti a oggetti attualmente effettiva o archiviata nel Registro di sistema da utilizzare al riavvio del computer.

In questo esempio è presente una configurazione di Traccia riferimenti a oggetti archiviata nel Registro di sistema e una diversa configurata per il runtime. La traccia di runtime inizia immediatamente ed esegue l'override di tutte le impostazioni del Registro di sistema. Tuttavia, se si riavvia il sistema, le impostazioni di runtime andranno perse e le impostazioni del Registro di sistema della sessione traccia riferimento oggetti diventano effettive.

Il comando seguente visualizza la configurazione della traccia di riferimento oggetti di runtime. Usa il /ko parametro senza altri parametri.

gflags /ko
Running Kernel Settings :
Object Ref Tracing Enabled
        Temporary Traces
        Pool Tags: Tag1;Fred
        Process Name: All Processes

Se Traccia riferimento oggetto è abilitato, come in questo esempio, le impostazioni visualizzate descrivono una traccia in corso.

Nel comando seguente vengono visualizzati i dati di configurazione di Traccia riferimento oggetti archiviati nel Registro di sistema. Usa il parametro /ro senza altri parametri.

gflags /ro

In risposta, Gflags visualizza i dati archiviati nel Registro di sistema:

Boot Registry Settings :
Object Ref Tracing Enabled
        Permanent Traces
        Pool Tags: Tag1;Fred
        Process Name: Notepad.exe

Se il computer è stato riavviato dopo aver aggiunto la configurazione di Traccia riferimento oggetti al Registro di sistema, le impostazioni visualizzate in risposta a un comando gflags /ro descrivono la traccia in corso. Tuttavia, se non è ancora stato riavviato o è stato riavviato, ma è stata avviata una traccia di riferimento all'oggetto di runtime (/ko), le impostazioni archiviate nel Registro di sistema non sono attualmente effettive, ma diventeranno effettive di nuovo quando si riavvia il sistema.

Disabilitare la traccia dei riferimenti a oggetti

Quando si disabilitano le impostazioni di traccia dei riferimenti a oggetti (flag kernel), la traccia si arresta immediatamente. Quando si disabilitano le impostazioni di Traccia riferimenti a oggetti nel Registro di sistema, la traccia si arresta quando si riavvia il computer.

Il comando seguente disabilita la traccia di riferimento oggetti in fase di esecuzione. Usa il /d parametro per disabilitare tutte le impostazioni. Non è possibile disabilitare le impostazioni in modo selettivo.

gflags /ko -d

Quando il comando ha esito positivo, Gflags risponde con il messaggio seguente:

Running Kernel Settings :
Object Ref Tracing Disabled

Il comando seguente disabilita la traccia di riferimento oggetti in fase di esecuzione.

Il comando seguente disabilita le impostazioni di Traccia riferimento oggetti nel Registro di sistema. Usa il /d parametro per disabilitare tutte le impostazioni. Non è possibile disabilitare le impostazioni in modo selettivo. Questo comando è efficace quando si riavvia il computer.

gflags /ro -d

Quando il comando ha esito positivo, Gflags risponde con il messaggio seguente:

Boot Registry Settings :
Object Ref Tracing Disabled