Freigeben über


Beispiel 15: Verwenden der Objektreferenzablaufverfolgung

Objektreferenzablaufverfolgung ist ein Windows-Feature, das eine sequenzielle Stapelablaufverfolgung aufzeichnet, wenn auf ein Objekt verwiesen oder abgeleitet wird. Es wurde entwickelt, um Fehler bei der Objektbehandlung zu erkennen, die zu Abstürze oder Speicherlecks führen können. Einige dieser Fehler sind schwer zu erkennen, da sie nicht konsistent angezeigt werden. Ausführliche Informationen finden Sie unter Objektreferenzablaufverfolgung.

Sie können die Objektreferenzablaufverfolgung mithilfe des Dialogfelds "Globale Kennzeichnungen " oder an einer Eingabeaufforderung konfigurieren. In den folgenden Beispielen wird die Eingabeaufforderung verwendet. Informationen zur Verwendung des Dialogfelds "Globale Kennzeichnungen" zum Konfigurieren der Objektreferenzablaufverfolgung finden Sie unter Konfigurieren der Objektreferenzablaufverfolgung.

Sie können Gflags verwenden, um die Objektreferenzablaufverfolgung zu aktivieren, zu deaktivieren und zu konfigurieren. Der Prozess sieht folgendermaßen aus:

  • Verwenden Sie Gflags, um die Objektreferenzablaufverfolgung in der Registrierung oder als Kernel-Flag -Einstellung (Laufzeit) zu aktivieren. Wenn Sie der Registrierung die Einstellung hinzufügen, müssen Sie den Computer neu starten, um die Ablaufverfolgung zu starten. Wenn Sie die Laufzeitversion der Einstellungen aktivieren, wird die Ablaufverfolgung sofort gestartet, die Ablaufverfolgungseinstellungen werden jedoch beim Herunterfahren oder Neustarten des Computers auf die Im Registrierungsschlüssel zurückgesetzt.

  • Starten Sie den Prozess, der das verdächtige Objekt erstellt. Die Ablaufverfolgung enthält nur Objekte, die von Prozessen erstellt wurden, die nach Beginn der Ablaufverfolgung gestartet werden. Wenn der Prozess während oder bald nach dem Neustart gestartet wird, fügen Sie der Registrierung die Ablaufverfolgungseinstellungen hinzu, und starten Sie das System dann neu.

  • Verwenden Sie die Debuggererweiterung !obtrace, um die Ablaufverfolgung anzuzeigen. Standardmäßig wird die Ablaufverfolgung beibehalten, bis das Objekt zerstört wird. Sie können jedoch den Parameter "/p " verwenden, um die Ablaufverfolgung beizubehalten, bis die Ablaufverfolgung deaktiviert ist.

  • Verwenden Sie Gflags, um die Objektreferenzablaufverfolgung in der Registrierung oder als Kernelkennzeichnungseinstellung (Laufzeit) zu deaktivieren. Wenn Sie die Einstellung aus der Registrierung löschen, müssen Sie den Computer neu starten, um die Ablaufverfolgung zu beenden. Wenn Sie die Laufzeitversion der Einstellungen deaktivieren, wird die Ablaufverfolgung sofort beendet, aber die Ablaufverfolgungseinstellungen werden bei heruntergefahren oder neu gestartet.

In diesen Beispielen wird gezeigt, wie Gflags zum Aktivieren und Deaktivieren der Objektreferenzablaufverfolgung verwendet wird. \

Laufzeitablaufverfolgung aktivieren

Mit dem folgenden Befehl wird die Objektreferenzablaufverfolgung an der Eingabeaufforderung aktiviert. Der Befehl verwendet den Parameter "/ko ", um die Objektreferenzablaufverfolgung als Kernelkennzeichnungseinstellung (Laufzeit) zu aktivieren. Der Befehl verwendet den Parameter "/t ", um die Pooltags Tag1 und Fred anzugeben. Daher werden alle Objekte, die mit Tag1 oder Fred erstellt werden, nachverfolgt.

gflags /ko /t Tag1;Fred

Da der Befehl die Kernelkennzeichnungseinstellungen (Laufzeit) ändert, wird die Objektreferenzablaufverfolgung sofort gestartet. Die Ablaufverfolgung enthält alle Objekte mit den Pooltags Tag1 oder Fred , die von Prozessen erstellt werden, die nach dem Senden des Befehls beginnen.

Gflags antwortet durch Drucken der folgenden Meldung:

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

Diese Meldung gibt an, dass die Objektreferenzablaufverfolgung aktiviert ist. "Temporäre Ablaufverfolgungen" gibt an, dass alle Datensätze der Ablaufverfolgung gelöscht werden, wenn das Objekt zerstört wird. Um die Ablaufverfolgung "dauerhaft" zu machen, verwenden Sie den Parameter "/p ", der Windows angibt, die Ablaufverfolgungsdaten beizubehalten, bis die Objektreferenzablaufverfolgung deaktiviert ist, oder der Computer wird heruntergefahren oder neu gestartet.

Aktivieren der Ablaufverfolgung in der Registrierung

Mit dem folgenden Befehl wird der Registrierung eine Objektreferenzprotokollierungskonfiguration hinzugefügt. Die von Ihnen konfigurierte Ablaufverfolgung beginnt beim Neustart des Computers.

Der Befehl verwendet den Parameter "/ro ", um die Objektreferenzablaufverfolgung als Registrierungseinstellung zu aktivieren. Der Befehl verwendet " /i ", um den Prozess für notepad.exe und den Parameter "/t " anzugeben, um die Pooltags Tag1 und Fred anzugeben. Daher werden alle Objekte, die vom Editor-Prozess mit tag1- oder Fred-Pooltags erstellt werden, nachverfolgt. Der Befehl verwendet auch den Parameter "/p ", der die Ablaufverfolgungsdaten speichert, bis die Ablaufverfolgung deaktiviert ist.

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

Wenn Sie den Befehl übermitteln, speichert Gflags die Informationen in der Registrierung. Da Registrierungseinstellungen jedoch erst wirksam sind, wenn Sie den Computer neu starten, wird diese Objektreferenzablaufverfolgung konfiguriert, aber noch nicht gestartet.

Gflags antwortet durch Drucken der folgenden Meldung:

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

Die Meldung gibt an, dass die Objektreferenzablaufverfolgung in der Registrierung aktiviert ist. "Permanente Ablaufverfolgungen" gibt an, dass die Ablaufverfolgungsdaten aufbewahrt werden, bis Sie den Computer herunterfahren oder neu starten. In der Nachricht werden auch die Pooltags und Bilddateinamen aufgelistet, die nachverfolgt werden.

Anzeigen der Objektreferenzablaufverfolgungskonfiguration

Sie können die Objektreferenzablaufverfolgungskonfiguration anzeigen, die derzeit wirksam ist oder in der Registrierung gespeichert ist, die verwendet werden soll, wenn der Computer neu gestartet wird.

In diesem Beispiel ist eine Konfiguration für die Objektreferenzablaufverfolgung in der Registrierung und eine andere Konfiguration für die Laufzeit gespeichert. Die Laufzeitablaufverfolgung beginnt sofort (und überschreibt alle Registrierungseinstellungen). Wenn Sie das System jedoch neu starten, gehen die Laufzeiteinstellungen verloren, und die Registrierungseinstellungen für die Objektreferenzprotokollierungssitzung werden wirksam.

Der folgende Befehl zeigt die Laufzeitkonfiguration für die Objektreferenzprotokollierung an. Er verwendet den Parameter "/ko " ohne andere Parameter.

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

Wenn die Objektreferenzablaufverfolgung wie in diesem Beispiel aktiviert ist, beschreiben die angezeigten Einstellungen eine Ablaufverfolgung, die ausgeführt wird.

Der folgende Befehl zeigt die Konfigurationsdaten der Objektreferenzprotokollierung an, die in der Registrierung gespeichert sind. Er verwendet den Parameter "/ro " ohne andere Parameter.

gflags /ro

Als Reaktion zeigt Gflags die in der Registrierung gespeicherten Daten an:

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

Wenn Sie den Computer neu gestartet haben, da Sie die Objektreferenz-Ablaufverfolgungskonfiguration zur Registrierung hinzugefügt haben, beschreiben die Einstellungen, die als Reaktion auf einen Gflags /ro-Befehl angezeigt werden, die Ablaufverfolgung, die gerade ausgeführt wird. Wenn Sie jedoch noch nicht neu gestartet oder neu gestartet wurden, aber dann eine Laufzeitobjektverweisablaufverfolgung (/ko) gestartet haben, sind die einstellungen, die in der Registrierung gespeichert sind, derzeit nicht wirksam, aber sie werden erneut wirksam, wenn Sie das System neu starten.

Objektreferenzablaufverfolgung deaktivieren

Wenn Sie die Laufzeit -Einstellungen (Kernelflagge) für objektreferenzbasierte Ablaufverfolgung deaktivieren, wird die Ablaufverfolgung sofort beendet. Wenn Sie die Einstellungen für die Objektreferenzablaufverfolgung in der Registrierung deaktivieren, wird die Ablaufverfolgung beendet, wenn Sie den Computer neu starten.

Mit dem folgenden Befehl wird die Laufzeitobjektreferenzablaufverfolgung deaktiviert. Er verwendet den Parameter "/d ", um alle Einstellungen zu deaktivieren. Einstellungen können nicht selektiv deaktiviert werden.

gflags /ko -d

Wenn der Befehl erfolgreich ist, antwortet Gflags mit der folgenden Meldung:

Running Kernel Settings :
Object Ref Tracing Disabled

Mit dem folgenden Befehl wird die Laufzeitobjektreferenzablaufverfolgung deaktiviert.

Mit dem folgenden Befehl werden die Einstellungen für die Objektreferenzablaufverfolgung in der Registrierung deaktiviert. Er verwendet den Parameter "/d ", um alle Einstellungen zu deaktivieren. Einstellungen können nicht selektiv deaktiviert werden. Dieser Befehl ist wirksam, wenn Sie den Computer neu starten.

gflags /ro -d

Wenn der Befehl erfolgreich ist, antwortet Gflags mit der folgenden Meldung:

Boot Registry Settings :
Object Ref Tracing Disabled