設定登錄

SymProxy 會將其設定儲存在此登錄機碼中。

HKLM/Software/Microsoft/Symbol Server Proxy

此登錄機碼會控制要從中尋找要儲存在網站中符號的位置、記錄層級,以及 SymProxy 是否使用與網路的直接連線運作。 您可以執行 SymProxy 註冊工具 (Symproxy.reg,) Windows 偵錯工具提供來建立此金鑰。 在命令提示字元中輸入 symproxy.reg ,或從 Windows 檔案總管按兩下它。

這會為前面加上 「x」 的設定新增專案,使其停用。 若要啟用設定,請從所需的設定前面移除 「x」。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Symbol Server Proxy]
"Available Settings"="Remove the 'x' prefix to use the setting"
"xMissAgeTimeout"=dword:00015180
"xMissAgeCheck"=dword:00000e10
"xMissTimeout"=dword:00000e10
"xNoCache"=dword:00000001
"xNoFilePointers"=dword:00000001
"xNoInternetProxy"=dword:00000001
"xNoLongerIndexedAuthoritive"=dword:00000001
"xNoUncompress"=dword:00000001
"xRequestTimeout"=dword:0000019
"xRetryAppHang"=dword:0000002
"xUriFilter"=dword:00000FF
"xUriTiers"=dword:0000001

symproxy.reg 登錄檔假設符號的虛擬目錄名稱,並設定符號路徑以使用 Microsoft 公用符號伺服器。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Symbol Server Proxy\Web Directories]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Symbol Server Proxy\Web Directories\Symbols]
"SymbolPath"="https://msdl.microsoft.com/download/symbols"

symproxy.reg 中的事件記錄專案會在本主題的事件記錄區段中涵蓋後者。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\Microsoft-Windows-SymProxy]
"ProviderGuid"="{0876099c-a903-47ff-af14-52035bb479ef}"
"EventMessageFile"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,\
  00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,\
  5c,00,69,00,6e,00,65,00,74,00,73,00,72,00,76,00,5c,00,53,00,79,00,6d,00,50,\
  00,72,00,6f,00,78,00,79,00,2e,00,64,00,6c,00,6c,00,00,00
"TypesSupported"=dword:00000007

本主題將討論 symproxy.reg 中的 Web 目錄專案。

Web 目錄

針對您使用作為符號存放區之 IIS 中產生的每個虛擬目錄,您必須在下列登錄機碼的 Web 目錄 子機碼下方設定登錄機碼。

HKLM/Software/Microsoft/Symbol Server Proxy

編輯符號存放區虛擬目錄的登錄機碼

  • 編輯 SymbolPath 的內容,以包含 SymProxy 符號存放區所使用的所有符號存放區。 如果使用多個符號存放區,請使用分號分隔它們。 每個值最多支援 10 個存放區。 HTTP 路徑必須包含 HTTPs:// 前置詞,而 UNC 路徑必須包含前置 \\ 詞。

例如,如果其中一個虛擬目錄稱為 Symbols,而且其存取的符號存放區位於 UNC 存放區 \\symbols\symbols\symbols 和 HTTP 存放區 https://msdl.microsoft.com/download/symbols ,請建立下列登錄機碼。

HKLM/Software/Microsoft/Symbol Server Proxy/Web Directories/Symbols

建立此索引鍵之後,請將其 SymbolPath 編輯為 \\symbols\symbols; https://msdl.microsoft.com/download/symbols 。 這可以在登錄編輯器的下列螢幕擷取畫面中看到。

登錄編輯器的螢幕擷取畫面,其中顯示更新的 SymbolPath。

在此範例中,SymProxy 會先搜尋 \\symbols\symbols 中的符號。 如果找不到檔案,將會使用 Microsoft 符號存放區。

  • 在符合虛擬目錄名稱之 Web 目錄下的每個索引鍵中,必須建立名為 SymbolPath 的REG_SZ。 值包含將用來填入 SymProxy 符號存放區的所有上游符號存放區。

  • 最多支援 10 個專案。

  • 以分號分隔專案。

  • UNC 路徑必須包含 「\\」 前置詞

  • HTTP 路徑必須包含 「HTTPs://」 前置詞

  • 將值從最低成本排序為成本最高的值。

    • 您必須在計算中平衡使用量效能目標與伺服器和資料通訊成本。

    • 一般而言,請將本機 SMB/HTTP 伺服器放在網際網路 HTTP 伺服器之前。

SymProxy 效能計數器

SymProxy 可以透過名為 SymProxy 的提供者發出效能計數器。

若要啟用效能計數器支援,請在系統管理員命令視窗中註冊 symproxy 資訊清單檔案:

C:\> lodctr.exe /m:%WINDIR%\system32\inetsrv\symproxy.man

若要停用效能計數器支援,請取消註冊資訊清單:

C:\> unlodctr.exe /m:%WINDIR%\system32\inetsrv\symproxy.man

適用于 Windows 的 SymProxy 事件追蹤

SymProxy 可以透過名為 Microsoft-Windows-SymProxy 的提供者建立 ETW 事件。

C:\> logman query providers | findstr SymProxy
Microsoft-Windows-SymProxy {0876099C-A903-47FF-AF14-52035BB479EF}

若要啟用 ETW 支援,請註冊資訊清單檔案:

C:\> wevtutil.exe install-manifest %WINDIR%\system32\inetsrv\symproxy.man

若要停用 ETW 支援,請取消註冊資訊清單檔:

C:\> wevtutil.exe uninstall-manifest %WINDIR%\system32\inetsrv\symproxy.man

事件記錄檔

如果已設定 ETW,事件會記錄為事件記錄檔中應用程式與服務記錄檔\Microsoft\Windows\SymProxy底下的作業和分析通道中的事件。

若要正確檢視事件記錄檔專案的訊息,symproxy.reg 檔案的事件記錄檔區域必須新增至登錄:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\Microsoft-Windows-SymProxy]
"ProviderGuid"="{0876099c-a903-47ff-af14-52035bb479ef}"
"EventMessageFile"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,\
  00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,\
  5c,00,69,00,6e,00,65,00,74,00,73,00,72,00,76,00,5c,00,53,00,79,00,6d,00,50,\
  00,72,00,6f,00,78,00,79,00,2e,00,64,00,6c,00,6c,00,00,00
"TypesSupported"=dword:00000007

SymProxy 事件

SymProxy 會記錄下列事件:

事件識別碼 描述 通道
1 ISAPI 篩選的開頭 管理
2 ISAPI 篩選準則的停止 管理
3 ISAPI 篩選準則的設定 管理
4 遺漏快取統計資料 管理
10 URL 要求 - 本機快取點擊 作業
11 URL 要求 - 本機快取遺漏 作業
20 透過 SymSrv 下載符號 作業
30 遺漏重大符號 管理
31 遺漏重大影像 管理
40 Symsrv – 找不到路徑 管理
41 Symsrv – 找不到檔案 管理
42 SymSrv – 拒絕存取 管理
43 SymSrv – 路徑太長 管理
49 SymSrv – 錯誤碼 管理
90 鎖定爭用 作業
100 一般重大訊息 分析
101 一般錯誤訊息 分析
102 一般警告訊息 分析
103 一般資訊訊息 分析
104 一般分析訊息 分析
105 一般偵錯訊息 偵錯

符號伺服器 Proxy 組態

SymProxy 會將其組態設定儲存在下列登錄機碼區域中:

HKLM/Software/Microsoft/Symbol Server Proxy

從這個位置,SymProxy 會取得其全域設定和上游符號存放區的符號路徑。

您可以在稍早所討論的 symproxy.reg 檔案中合併來建立此金鑰。

符號伺服器 Proxy 金鑰

符號伺服器 Proxy 登錄機碼支援下列全域設定, (所有REG_DWORD) 。 您可以回收應用程式集區來即時套用設定。 將會建立新的 w3wp.exe 程式,並讀取新的值。 一旦對舊 w3wp.exe 程式的所有擱置要求都已完成,舊的 w3wp.exe 程式將會結束。 IIS 預設會每隔 1,740 分鐘 (29 小時) 回收 w3wp.exe 進程。

REG_DWORD Description
NoInternetProxy

以服務的形式執行時,SymSrv.dll 使用 WinHTTP 而不是 WinInet 提出 HTTP 要求。 因此,您可能需要設定 HTTP Proxy 設定,讓服務可以存取網路資源外部。 您可以使用 netsh 程式來執行此動作。 輸入 「netsh.exe winHTTP -?」 以取得相關指示)。

根據預設,SymProxy 會使用指定的 HTTP Proxy。 如果未設定 HTTP Proxy,SymProxy 將會使用虛擬 Proxy。 這可讓您安全地存取內部網路內的 HTTP 網站。 作為副作用,這可防止 SymProxy 直接連線到不安全的網站。

  • 未指定 - (預設) 停用 - 使用 Proxy
  • 0 – 已停用
  • 1+ – 已啟用

NoFilePointers

根據預設,針對不存在的符號,SymProxy 會在本機快取) 中尋找要求檔案旁的 file.ptr 檔案 (。 如果找到,它會傳回 file.ptr 檔案所指定的位置。 只有在 SymStore.exe 填入本機快取時,才需要這項功能。

  • 未指定 - (預設) 已停用 - file.ptr 檔案會搜尋/讀取
  • 0 – 已停用
  • 1+ – 已啟用

NoUncompress

根據預設,SymProxy 會在將檔案傳回給呼叫端之前解壓縮下載的符號。 這會減少用戶端的 CPU,但會增加 I/O。

  • 未指定 - (預設) 停用 - 解壓縮發生
  • 0 – 已停用
  • 1+ – 已啟用

NoCache

根據預設,SymProxy 會將下載的符號快取到虛擬目錄路徑所定義的本機檔案系統。

  • 未指定 - (預設) 停用 - 快取發生
  • 0 – 已停用
  • 1+ – 已啟用

MissTimeout

逾時期間,以秒為單位,其中遺漏的符號會回報為遺漏,而不會重新查詢上游符號伺服器。

遺漏與 UTC 型時間相關聯。 檔案的後續要求會立即拒絕 N 秒。

在 N 秒後檔案的第一個要求會導致重新查詢上游符號存放區。

成功時,會傳回符號檔,並刪除遺漏。

失敗時,遺漏會向前移至 UTC) 中的目前時間 (,以啟動新的逾時期間。

使用「遺漏快取」效能計數器來監視遺漏。

  • 未指定 - (預設) 300 秒/5 分鐘
  • 0 – 功能已停用
  • N – 逾時持續 N 秒

MissAgeCheck

遺漏年齡檢查之間的期間。 系統會掃描遺漏快取,並移除超過 MissAgeTimeout 秒的記錄。

目前的統計資料會使用事件識別碼 4 儲存至事件記錄檔。

  • 未指定 - (預設) 3600 秒 / 1 小時
  • 0 – 功能已停用
  • N – 在 N 秒內檢查之間的期間

MissAgeTimeout

清除每個遺漏快取專案的逾時。 此專案已清除,因為此期間內的任何要求都遭到拒絕。

  • 未指定 - (預設) 86400 秒 / 1 天
  • 0 – 功能已停用
  • N – N 秒內專案的逾時

NoLongerIndexedAuthoritive

啟用時,NoLongerIndexed 的 file.ptr 回應將會被視為所有符號存放區中的授權單位。

使用此方法來避免對未編制檔案索引的伺服器呼叫 (不必要的) 呼叫。

  • 未指定 - (預設) 已停用
  • 0 – 已停用
  • 1+ – 已啟用

RetryAppHang

啟用 [重試至上游 HTTP 符號存放區]。 這相當於 SymSrv SSRVOPT_RETRY_APP_HANG (0x80000000) 選項。

透過上游 HTTP 符號存放區的 'Symbol-Agent-Status' HTTP 回應標頭收到0x80070512/HRESULT_FROM_WIN32 (ERROR_APP_HANG) 錯誤碼時,通訊端會保持開啟狀態,而且 GET 會重複到 'N' 次。

SymProxy 會針對相同的 URI 聯合多個要求。 當任何擱置的要求達到 25 秒時,SymProxy 會透過「符號代理程式狀態」HTTP 回應標頭傳回 0x80070512給呼叫端,但在背景中繼續作業。

用戶端應該在 SymSrv 中啟用SSRVOPT_RETRY_APP_HANG選項,以便支援 (額外的) 長要求, 基本上會鏈結重試上游。

SymProxy 預設回應逾時為 25 秒,讓通訊端關閉前的回應會在 (預設) 30 秒逾時,SymSrv 用於 HTTP 符號存放區。 較新版本的 SymSrv 會透過 mSec) 中的 'Symbol-Agent-Receive-Timeout' HTTP 要求標頭傳送其設定的 HTTP 逾時值 (。 如果提供此 HTTP 要求標頭,則會使用此值,而不是 25 秒預設值。

  • 未指定 - (預設) 已停用
  • 0 – 已停用
  • N – 重試嘗試

UriFilter

啟用 URI 篩選。 這相當於 SymSrv SSRVOPT_URI_FILTER (0x20000000) 選項。

URI 篩選可減少 所有 上游符號存放區的各種要求。 這些值是位元遮罩。

HTTP - SSRVURI_HTTP_MASK (0x0F)

  • 0x01 - SSRVURI_HTTP_NORMAL - 例如 http://symbols/.../foo.pdb
  • 0x02 - SSRVURI_HTTP_COMPRESSED - 例如 http://symbols/.../foo.pd_
  • 0x04 - SSRVURI_HTTP_FILEPTR - 例如 http://symbols/.../file.ptr

UNC - SSRVURI_UNC_MASK (0xF0)

  • 0x10 - SSRVURI_UNC_NORMAL - 例如 \\MyServer\Symbols\...\foo.pdb
  • 0x20 - SSRVURI_UNC_COMPRESSED - 例如 \\MyServer\Symbols\...\foo.pd_
  • 0x40 - SSRVURI_UNC_FILEPTR - 例如 \\MyServer\Symbols\...\file.ptr

UriTiers

啟用 URI 層。 這相當於 SymSrv SSRVOPT_URI_TIERS (0x40000000) 選項。

URI 層會強制 所有 上游符號存放區所使用的階層架構。 如果未設定,則需要額外的要求來判斷架構。 根目錄中的 'index2.txt' 存在表示 2 層式配置。

1 層存放區的格式為:/widget.dll/ < index > /widget.dll|widget.dl_|file.ptr

2 層存放區的格式為: /wi/widget.dll/ < index > /widget.dll|widget.dl_|file.ptr

  • 未指定 - (預設) 停用
  • 0 – 已停用
  • 1 – 1 層符號存放區
  • 2 – 2 層符號存放區

存取外部網路資源

當 SymSrv 與 SymProxy 搭配使用時,它會以服務的形式執行,並使用 WinHTTP API 透過 HTTP 連線存取符號。 這與針對此目的使用 WinInet 的一般行為不同。

因此,您可能需要設定 HTTP Proxy 設定,讓此服務可以存取網路資源外部。 使用下列其中一種方法來設定這些設定:

  • 使用 Netsh 工具 (netsh.exe) 。 如需指示,請在命令提示字元視窗中輸入下列命令:

    netsh winhttp -? 
    

SymProxy 的預設行為是使用 ProxyCfg 或 Netsh 所指定的任何 HTTP Proxy。 如果未設定 HTTP Proxy,SymProxy 會使用虛擬 Proxy 來允許存取內部網路內的安全 HTTP 網站。 作為副作用,這項技術可防止 SymProxy 使用外部網際網路的直接連線。 如果您想要允許 SymProxy 直接連線到網際網路,請在登錄的符號伺服器 Proxy機碼中建立名為NoInternetProxy的REG_DWORD值。 將 NoInternetProxy 的值設定為 1,並確認 ProxyCfg 未指出任何 HTTP Proxy。