共用方式為


準備使用UMDH

您必須先完成本節所述的設定工作,才能使用使用者模式傾印堆積 (UMDH) 來擷取進程的堆積配置。 如果計算機未正確設定,UMDH 將不會產生任何結果,否則結果將會不完整或不正確。

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

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

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

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

  • 或者,同樣地,使用下列 GFlags 命令行,其中 ImageName 是行程名稱(包括擴展名):

    gflags /i ImageName +ust

根據預設,Windows 收集的堆疊追蹤數據量限製為 x86 處理器的 32 MB,而 x64 處理器的堆疊追蹤資料量則限製為 64 MB。 如果您必須增加此資料庫的大小, 請選擇 GFlags 圖形化介面中的 [圖像檔] 索引標籤、輸入行程名稱、按 TAB 鍵、核 取 [Stack Backtrace (Megs)] 複選框、在相關聯的文本框中輸入值 (以 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)。 啟動要追蹤其配置的應用程式之前,必須先進行此設定。

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

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

尋找進程標識碼

UMDH 會依進程標識碼 (PID) 識別進程。 您可以使用 Task Manager、Tasklist 或 TList 來尋找任何執行中進程的 PID。