Dela via


Exempel 15: Använda spårning av objektreferenser

Objektreferensspårning är en Windows-funktion som registrerar en sekventiell stackspårning när ett objekt refereras till eller derefereras. Den är utformad för att identifiera fel i objekthantering som kan leda till krascher eller minnesläckor. Vissa av dessa fel är svåra att identifiera eftersom de inte visas konsekvent. Detaljerad information finns i objektreferensspårning.

Du kan konfigurera spårning av objektreferenser med hjälp av dialogrutan Globala flaggor eller i ett kommandotolkfönster. I följande exempel används kommandotolken. Information om hur du använder dialogrutan Globala flaggor för att konfigurera spårning av objektreferenser finns i Konfigurera objektreferensspårning.

Du kan använda Gflags för att aktivera, inaktivera och konfigurera spårning av objektreferenser. Processen är följande:

  • Använd Gflags för att aktivera spårning av objektreferenser i registret eller som en kernelflagga (körningstid). Om du lägger till inställningen i registret måste du starta om datorn för att börja spåra. Om du aktiverar körningstidsversionen av inställningarna startar spårningen omedelbart, men spårningsinställningarna återgår till dem i registernyckeln när du stänger av eller startar om datorn.

  • Starta processen som skapar det misstänkta objektet. Spårningen innehåller endast objekt som skapats av processer som startas när spårningen börjar. Om processen startar under eller strax efter omstarten lägger du till spårningsinställningarna i registret och startar sedan om systemet.

  • Använd debuggerförlängningen!obtrace för att visa spårningen. Som standard underhålls spårningen tills objektet har förstörts, men du kan använda parametern /p för att underhålla spårningen tills spårning har inaktiverats.

  • Använd Gflags för att inaktivera spårning av objektreferenser i registret eller som en kernelflagga (körtid). Om du tar bort inställningen från registret måste du starta om datorn för att avsluta spårningen. Om du inaktiverar körningsversionen av inställningarna avslutas spårningen omedelbart, men spårningsinställningarna återgår till dem i registret när du stänger av eller startar om datorn.

De här exemplen visar hur du använder Gflags för att aktivera och inaktivera objektreferensspårning. \

Aktivera körningsspårning

Följande kommando aktiverar spårning av objektreferenser i kommandotolken. Kommandot använder parametern /ko för att aktivera objektreferensspårning som en kernelflagga (körningstid). Kommandot använder parametern /t för att ange pooltaggar Tag1 och Fred. Därför spåras alla objekt som skapas med Tag1 eller Fred.

gflags /ko /t Tag1;Fred

Eftersom kommandot ändrar inställningarna för kernelflaggan (körning) startas spårningen av objektreferensen omedelbart. Spårningen innehåller alla objekt med pooltaggar Tag1 eller Fred som skapas av processer som startas efter att kommandot har skickats.

Gflags svarar genom att skriva ut följande meddelande:

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

Det här meddelandet anger att spårning av objektreferens är aktiverat. "Tillfälliga spårningar" anger att alla poster i spårningen tas bort när objektet förstörs. Om du vill göra spårningen "permanent" använder du parametern /p, som instruerar Windows att behålla spårningsdata tills objektreferensspårning har inaktiverats, eller så stängs datorn av eller startas om.

Aktivera spårning i registret

Följande kommando lägger till en objektreferensspårningskonfiguration i registret. Spårningen som du konfigurerar börjar när du startar om datorn.

Kommandot använder parametern /ro för att aktivera spårning av objektreferenser som en registerinställning. Kommandot använder /i för att ange processen för notepad.exe och parametern /t för att ange pooltaggar Tag1 och Fred. Därför spåras alla objekt som skapas av Notepad-processen med Tag1 eller Fred pooltaggar. Kommandot använder också parametern /p, som behåller spårningsdata tills spårningen har inaktiverats.

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

När du skickar kommandot lagrar Gflags informationen i registret. Men eftersom registerinställningarna inte är effektiva förrän du startar om datorn konfigureras den här objektreferensspårningen, men den har inte startats ännu.

Gflags svarar genom att skriva ut följande meddelande:

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

Meddelandet anger att spårning av objektreferens är aktiverat i registret. "Permanenta spårningar" anger att spårningsdata kommer att behållas tills du stänger av eller startar om datorn. Meddelandet visar också de pooltaggar och bildfilnamn som ska spåras.

Visa objektreferensspårningskonfigurationen

Du kan visa konfigurationen för spårning av objektreferenser som för närvarande är effektiv eller som lagras i registret och som ska användas när datorn startas om.

I det här exemplet finns det en objektreferensspårningskonfiguration som lagras i registret och en annan som har konfigurerats för körning. Körningsspårningen börjar omedelbart (och åsidosätter alla registerinställningar). Men om du startar om systemet går körningsinställningarna förlorade och registerinställningarna för objektreferensspårningssessionen börjar gälla.

Följande kommando visar konfigurationen för objektreferensspårning vid körtid. Den använder parametern /ko utan några andra parametrar.

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

Om spårning av objektreferens är aktiverat, som det är i det här exemplet, beskriver de inställningar som visas en spårning som pågår.

Följande kommando visar konfigurationsdata för spårning av objektreferenser som lagras i registret. Den använder parametern /ro utan några andra parametrar.

gflags /ro

Som svar visar Gflags data som lagras i registret:

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

Om du har startat om datorn sedan du lade till spårningskonfigurationen för objektreferens i registret, beskriver de inställningar som visas som svar på ett gflags/ro-kommando den spårning som pågår. Men om du ännu inte har startat om eller om du har startat om, men sedan startat en referensspårning för körningsobjekt (/ko), är de inställningar som lagras i registret för närvarande inte effektiva, men de börjar gälla igen när du startar om systemet.

Inaktivera spårning av objektreferens

När du inaktiverar spårningsinställningar för objektreferenser vid körning (kernelflagga) stoppas spårningen omedelbart. När du inaktiverar inställningarna för spårning av objektreferenser i registret stoppas spårningen när du startar om datorn.

Följande kommando inaktiverar objektreferensspårning vid körning. Den använder parametern /d för att inaktivera alla inställningar. Du kan inte inaktivera inställningarna selektivt.

gflags /ko -d

När kommandot lyckas svarar Gflags med följande meddelande:

Running Kernel Settings :
Object Ref Tracing Disabled

Följande kommando inaktiverar spårning av en objektreferens vid körning.

Följande kommando inaktiverar inställningarna för spårning av objektreferenser i registret. Den använder parametern /d för att inaktivera alla inställningar. Du kan inte inaktivera inställningarna selektivt. Det här kommandot gäller när du startar om datorn.

gflags /ro -d

När kommandot lyckas svarar Gflags med följande meddelande:

Boot Registry Settings :
Object Ref Tracing Disabled