共用方式為


範例 15:使用對象參考追蹤

對象參考追蹤是 Windows 功能,會在參考或取值物件時記錄循序堆疊追蹤。 其設計目的是偵測可能導致損毀或記憶體流失的對象處理錯誤。 其中一些錯誤很難偵測,因為它們不會一致出現。 如需詳細資訊,請參閱 對象參考追蹤

您可以使用 [ 全域旗標 ] 對話框或在命令提示字元中設定物件參考追蹤。 下列範例使用命令提示字元。 如需使用 [ 全域旗標 ] 對話框來設定對象參考追蹤的詳細資訊,請參閱 設定對象參考追蹤

您可以使用 Gflags 來啟用、停用及設定物件參考追蹤。 此程序如下:

  • 使用 Gflags 在登錄中啟用物件參考追蹤 ,或做為核心旗標 (運行時間) 設定。 如果您將設定新增至登錄,您必須重新啟動電腦以開始追蹤。 如果您啟用設定的運行時間版本,追蹤會立即啟動,但當您關閉或重新啟動電腦時,追蹤設定會還原為登錄機碼中的設定。

  • 啟動建立可疑物件的程式。 追蹤只會包含追蹤開始之後由進程所建立的物件。 如果進程在重新啟動期間或很快啟動,請將追蹤設定新增至登錄,然後重新啟動系統。

  • 使用 !obtrace 調試程式延伸模組來檢視追蹤。 根據預設,追蹤會維持到物件終結為止,但您可以使用 /p 參數來維護追蹤,直到停用追蹤為止。

  • 使用 Gflags 在登錄中停用物件參考追蹤。或做為核心旗標 (運行時間) 設定。 如果您從登錄中刪除設定,則必須重新啟動電腦以結束追蹤。 如果您停用設定的運行時間版本,追蹤會立即結束,但當您關閉或重新啟動計算機時,追蹤設定會還原為登錄中的設定。

這些範例示範如何使用 Gflags 來啟用和停用對象參考追蹤。 \

啟用運行時間追蹤

下列命令會在命令提示字元啟用對象參考追蹤。 此命令會使用 /ko 參數來啟用物件參考追蹤作為核心旗標 (運行時間) 設定。 此命令會使用 /t 參數來指定集區標籤 Tag1Fred。 因此,會追蹤使用 Tag1Fred 建立的所有物件。

gflags /ko /t Tag1;Fred

因為命令會變更核心旗標 (運行時間) 設定,因此對象參考追蹤會立即啟動。 追蹤會包含集區標籤 Tag1Fred 的所有物件,這些標記是由提交命令之後啟動的進程所建立。

Gflags 會藉由列印下列訊息來回應:

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

此訊息表示已啟用物件參考追蹤。 「暫存追蹤」表示對象終結時,會刪除追蹤的所有記錄。 若要讓追蹤成為「永久」,請使用 /p 參數,指示 Windows 保留追蹤數據,直到停用對象參考追蹤,或電腦關閉或重新啟動為止。

在登錄中啟用追蹤

下列命令會將對象參考追蹤組態新增至登錄。 您設定的追蹤會在重新啟動電腦時開始。

此命令會 使用 /ro 參數來啟用物件參考追蹤做為登錄設定。 此命令會 使用 /i 來指定notepad.exe的程式,以及 /t 參數來指定集區卷標 Tag1Fred。 因此,追蹤使用 Tag1Fred 集區標籤的記事本程式所建立的所有物件。 此命令也會使用 /p 參數,它會保留追蹤數據,直到停用追蹤為止。

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

當您提交命令時,Gflags 會將資訊儲存在登錄中。 不過,由於登錄設定在您重新啟動計算機之前無效,因此此對象參考追蹤已設定,但尚未啟動。

Gflags 會藉由列印下列訊息來回應:

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

訊息指出登錄中已啟用對象參考追蹤。 「永久追蹤」表示追蹤數據會保留,直到您關閉或重新啟動電腦為止。 此訊息也會列出將追蹤的集區標籤和映像檔名稱。

顯示物件參考追蹤組態

您可以顯示目前有效或儲存在電腦重新啟動時所要使用的登錄中的物件參考追蹤組態。

在此範例中,有一個對象參考追蹤組態儲存在登錄中,以及針對運行時間設定的不同對象參考追蹤組態。 運行時間追蹤會立即開始 (並覆寫任何登錄設定)。 不過,如果您重新啟動系統,運行時間設定就會遺失,而且對象參考追蹤會話登錄設定會生效。

下列命令會顯示運行時間對象參考追蹤組態。 它不使用其他參數的 /ko 參數。

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

如果已啟用對象參考追蹤,如此範例所示,所顯示的設定描述正在進行中的追蹤。

下列命令會顯示儲存在登錄中的物件參考追蹤組態數據。 它不使用其他參數的 /ro 參數。

gflags /ro

回應中,Gflags 會顯示儲存在登錄中的數據:

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

如果您已重新啟動計算機,因為您已將對象參考追蹤組態新增至登錄,則會顯示以回應 gflags /ro 命令的設定來描述進行中的追蹤。 不過,如果您尚未重新啟動,或已重新啟動,但接著啟動運行時間對象參考追蹤 (/ko),則儲存在登錄中的設定目前無效,但在重新啟動系統時會再次生效。

停用對象參考追蹤

當您停用運行時間 (核心旗標) 對象參考追蹤設定時,追蹤會立即停止。 當您停用登錄中的物件參考追蹤設定時,追蹤會在重新啟動計算機時停止。

下列命令會停用運行時間對象參考追蹤。 它會使用 /d 參數來停用所有設定。 您無法選擇性地停用設定。

gflags /ko -d

當命令成功時,Gflags 會以下列訊息回應:

Running Kernel Settings :
Object Ref Tracing Disabled

下列命令會停用運行時間對象參考追蹤。

下列命令會停用登錄中的物件參考追蹤設定。 它會使用 /d 參數來停用所有設定。 您無法選擇性地停用設定。 當您重新啟動電腦時,此命令會有效。

gflags /ro -d

當命令成功時,Gflags 會以下列訊息回應:

Boot Registry Settings :
Object Ref Tracing Disabled