Share via


準備使用 UMDH

您必須先完成本節所述的設定工作,才能使用User-Mode傾印堆積 (UMDH) 來擷取進程的堆積配置。 如果電腦未正確設定,UMDH 將不會產生任何結果,或結果不完整或不正確。

建立使用者模式堆疊追蹤資料庫

在使用 UMDH 擷取進程的堆積配置之前,您必須設定 Windows 來擷取堆疊追蹤。

若要啟用進程的堆疊追蹤擷取,請使用 GFlags 來設定進程的 建立使用者模式堆疊追蹤資料庫 旗標。 這可以透過下列其中一種方法來完成:

  • 在 GFlags 圖形化介面中,選擇 [ 影像檔] 索引 標籤。輸入進程名稱,包括副檔名 (,例如,Notepad.exe) 。 按 TAB 鍵,選取 [ 建立使用者模式堆疊追蹤資料庫],然後選取 [ 套用]。

  • 或者,同樣地,請使用下列 GFlags 命令列,其中 ImageName 是進程名稱 (包括副檔名) :

    gflags /iImageName+ust

根據預設,Windows 收集的堆疊追蹤資料量限制為 x86 處理器上的 32 MB,x64 處理器上則限制為 64 MB。 如果您必須增加此資料庫的大小,請在 GFlags 圖形化介面中選擇 [影像檔] 索引標籤、輸入進程名稱、按 TAB 鍵、核取 [堆疊回 (溯 ) ) ] 核取方塊、在相關聯的文字方塊中輸入 MB) 中的值 (,然後選取 [ 套用]。

注意 只有在需要時才增加此資料庫,因為它可能會耗用有限的 Windows 資源。 當您不再需要較大的大小時,請將此設定傳回至其原始值。

這些設定會影響程式的所有新實例。 它不會影響目前執行中的程式實例。

存取必要的符號

使用 UMDH 之前,您必須能夠存取應用程式的適當符號。 UMDH 會使用環境變數所指定的符號路徑_NT_SYMBOL_PATH。 將此變數設定為等於包含您應用程式符號的路徑。

如果您也包含 Windows 符號的路徑,分析可能更完整。 這個符號路徑的語法與偵錯工具所使用的語法相同;如需詳細資訊,請參閱 符號路徑

例如,如果應用程式的符號位於 C:\MyApp\Symbols,而且您已將 Windows 符號檔安裝至 \\myshare\winsymbols,則您會使用下列命令來設定符號路徑:

set _NT_SYMBOL_PATH=c:\myapp\symbols;\\myshare\winsymbols

另一個範例是,如果您的應用程式符號位於 C:\MyApp\Symbols,而且您想要使用 Windows 符號的公用 Microsoft 符號存放區,使用 C:\MyCache 作為下游存放區,您可以使用下列命令來設定符號路徑:

set _NT_SYMBOL_PATH=c:\myapp\symbols;srv*c:\mycache*https://msdl.microsoft.com/download/symbols

重要 假設您有兩部電腦:建立 UMDH 記錄的 記錄電腦 ,以及分析 UMDH 記錄 的分析電腦 。 分析電腦上的符號路徑必須指向記錄電腦上載入之記錄電腦上之 Windows 版本的符號。 請勿將分析電腦上的符號路徑指向符號伺服器。 如果您這樣做,UMDH 會擷取在分析電腦上執行的 Windows 版本符號,而 UMDH 將不會顯示有意義的結果。

停用 BSTR 快取

自動化 (先前稱為 OLE Automation) 會快取 BSTR 字串所使用的記憶體。 這可防止 UMDH 正確判斷記憶體配置的擁有者。 若要避免這個問題,您必須停用 BSTR 快取。

若要停用 BSTR 快取,請將 OANOCACHE 環境變數設定為 1 (1) 。 啟動要追蹤其配置的應用程式之前,必須先進行此設定。

或者,您可以藉由呼叫 .NET Framework setNoOaCache函式,從應用程式本身停用 BSTR 快取。 如果您選擇此方法,您應該提早呼叫此函式,因為呼叫 SetNoOaCache 時已經快取的任何 BSTR 配置都會保持快取狀態。

如果您需要追蹤服務所做的配置,您必須將 OANOCACHE 設定為系統內容變數,然後重新開機 Windows,讓此設定生效。

尋找進程識別碼

UMDH 會根據其進程識別碼 (PID) 來識別進程。 您可以使用工作管理員、工作清單或 TList找到任何執行中進程的 PID。