Windows 調試程式的符號路徑

符號路徑會指定 Windows 調試程式的位置,例如 WinDbg、KD、CDB 和 NTST,尋找符號檔。 如需符號和符號檔的詳細資訊,請參閱 符號

某些編譯程式包括 Microsoft Visual Studio,會將符號檔放在與二進位檔案相同的目錄中。 符號檔和核取的二進位檔包含路徑和檔名資訊,可讓調試程式自動尋找符號檔。 如果您在建置可執行檔的計算機上偵錯使用者模式進程,而且如果符號檔位於其原始位置,調試程式就可以找到符號檔,而不需要設定符號路徑。

在大部分的其他情況下,您需要設定符號路徑,以指向您的符號檔位置。

提示

使用 .symfix 設定公用 Microsoft 公用符號伺服器的預設路徑,在許多情況下都適用。

符號路徑語法

調試程式的符號路徑是由多個目錄路徑所組成的字串,以分號分隔。 例如: C:\Dir1;C:\Dir2\DirA;C:\Dir2\DirB

支援相對路徑。 不過,除非您一律從相同的目錄啟動調試程式,否則您應該在每個路徑之前新增驅動器號或網路共用。 也支援網路共用。

針對符號路徑中的每個目錄,調試程式會尋找三個目錄。 例如,如果符號路徑包含 C:\Dir1 ,且調試程式正在尋找 DLL 的符號資訊,調試程式會依序尋找下列目錄中的符號資訊:

  • C:\Dir1\symbols\dll
  • C:\Dir1\dll
  • C:\Dir1

調試程式接著會針對符號路徑中的每個目錄重複此程式。 最後,調試程式會尋找目前目錄,然後在目前目錄中,附加 ..\dll 至該目錄。 除錯程式會 ..\dll根據偵錯的二進位檔,附加、 ..\exe..\sys

符號檔具有日期和時間戳記。 調試程式一律會在偵錯的二進位檔上尋找符合時間戳的符號。 您不必擔心調試程式使用這個序列中第一個找到的錯誤符號。 如需符號檔案無法使用時回應的詳細資訊,請參閱 比對符號名稱

設定符號路徑的其中一種方式是輸入 .andand 命令。 如需設定符號路徑的其他方式,請參閱本主題稍後 的控制符號路徑

在本機快取符號

您應該在本機快取您的符號。 在本機快取符號的其中一種方式是包含 cache*;cache*localsymbolcache;* 包含在您的符號路徑中。

如果您在符號路徑中包含字串,則從此字串 cache*; 右邊的任何專案載入的符號會儲存在本機電腦上的預設符號快取目錄中。 例如,下列命令會指示調試程式從名為 \\someshare 的網路共用取得符號,並在本機計算機上的預設位置快取符號。

.sympath cache*;\\someshare

如果您在符號路徑中包含字串 cache*localsymbolcache; ,則從出現在此字串右邊的任何元素載入的符號會儲存在 局部變數mbolcache 目錄中。

例如,下列命令會告訴調試程式從網路共用 \\someshare 取得符號,並快取目錄中的 c:\MySymbols 符號。

.sympath cache*C:\MySymbols;\\someshare

使用符號伺服器:srv*

如果您連線到因特網或公司網路,存取符號的最有效率方式就是使用符號伺服器,例如公用 Microsoft 公用符號伺服器。 您可以在符號路徑中使用下列其中一個字串,以使用符號伺服器。

  • srv*字串

    如果您在符號路徑中包含字串 srv* ,調試程式會使用符號伺服器從預設符號存放區取得符號。 例如,下列命令會指示調試程式從預設符號存放區取得符號。 這些符號不會在本機計算機上快取。

    .sympath srv*
    
  • srv*symbolstore字串

    如果您在符號路徑中包含字串 srv*symbolstore ,調試程式會使用符號伺服器從 符號存放區取得符號。 例如,下列命令會指示調試程式從 Microsoft 符號伺服器 存放區取得符號。 這些符號不會在本機計算機上快取。

    .sympath srv*https://msdl.microsoft.com/download/symbols
    
  • srv*localsymbolcache*symbolstore字串

    如果您在符號路徑中包含字串 srv*localcache*symbolstore ,調試程式會使用符號伺服器從 符號存放區取得符號 ,並在 localcache 目錄中快取它們。 例如,下列命令會指示調試程式從 Microsoft 符號伺服器取得符號,https://msdl.microsoft.com/download/symbols 並在 中 c:\MyServerSymbols快取符號。

    .sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
    

如果您的電腦上有手動放置符號的目錄,請勿使用該目錄做為從符號伺服器取得之符號的快取。 請改用兩個不同的目錄。 例如,您可以手動將符號放在 中 c:\MyRegularSymbols ,然後指定 c:\MyServerSymbols 為從伺服器取得之符號的快取。 下列範例示範如何在符號路徑中指定這兩個目錄。

.sympath C:\MyRegularSymbols;srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols

如需符號伺服器和符號存放區的詳細資訊,請參閱 自定義符號存放區和符號伺服器

合併快取* 和 srv*

如果您在符號路徑中包含字串,則從此字串 cache*; 右邊的任何專案載入的符號會儲存在本機電腦上的預設符號快取目錄中。 例如,下列命令會指示調試程式從 Microsoft 符號伺服器 存放區取得符號,並將其快取在預設符號快取目錄中。

.sympath cache*;srv*https://msdl.microsoft.com/download/symbols

如果您在符號路徑中包含字串 cache*localsymbolcache; ,則從出現在此字串右邊的任何元素載入的符號會儲存在 局部變數mbolcache 目錄中。

例如,下列命令會指示調試程式從 Microsoft 符號伺服器 存放區取得符號,並快取目錄中的 c:\MySymbols 符號。

.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols

使用 AgeStore 減少快取大小

您可以使用 AgeStore 工具來刪除超過指定日期的快取檔案,或刪除足夠的舊檔案,讓產生的快取大小小於指定的數量。 如果您的下游存放區太大,此快取檔案的清除會很有用。

延遲符號載入

調試程式的預設行為是使用 延遲符號載入,也稱為 延遲符號載入。 這種載入表示在需要符號之前不會載入符號。

當符號路徑變更時,例如,使用 .and 命令,所有具有匯出符號的載入模組都會延遲重載。

如果新路徑不再包含用來載入 PDB 符號的原始路徑,則會延遲重載具有完整 PDB 符號 的模組符號。 如果新路徑仍然包含 PDB 符號檔的原始路徑,則不會延遲重載這些符號。

您可以使用 -s 命令列選項,在 CDB 和 KD 中關閉延遲符號載入。 您也可以使用 ld load symbols 命令,或使用 .reload 模組命令 搭配 /f 選項來強制載入符號。

Azure DevOps Services 成品

Azure DevOps Services 中的 Azure Artifacts 可以使用符號伺服器。 若要瞭解如何在 WinDbg 中使用 Azure Artifacts,請參閱 在 WinDbg 中使用符號進行偵錯。 如需 Azure 產生的符號的一般資訊,請參閱 符號概觀

控制符號路徑

若要控制符號路徑,您可以選取下列其中一種方法:

  • 使用 .symfix set 符號存放區路徑命令 ,將預設路徑設定為在許多情況下運作良好的公用 Microsoft 符號伺服器。 若要設定本機快取,只要輸入 .symfix C:\MyCache

  • 使用 .andand 命令 來顯示、設定、變更或附加至路徑。

  • 開始調試程式之前,請使用 _NT_SYMBOL_PATH_NT_ALT_SYMBOL_PATH環境變數 來設定路徑。 符號路徑是藉由在 之後_NT_ALT_SYMBOL_PATH附加_NT_SYMBOL_PATH來建立。 一般而言,路徑是透過 設定。_NT_SYMBOL_PATH 不過,您可能想要在特殊情況下使用 _NT_ALT_SYMBOL_PATH 來覆寫這些設定,例如,如果您有共用符號檔案的私人版本。 如果您嘗試透過這些環境變數新增無效的目錄,調試程式會忽略此目錄。

  • 當您啟動除錯程式時,請使用 -y 命令列選項 來設定路徑。

  • 僅在 WinDbg 中,您可以使用 [檔案] |符號檔案路徑命令 或按 CTRL+S 以顯示、設定、變更或附加至路徑。

如果您使用 -sins 命令行選項,調試程式會忽略符號路徑環境變數。

疑難排解

使用 !sym 雜訊-nWinDbg Command-Line 選項 ,在載入符號時顯示其他詳細數據。 如需其他疑難解答策略,請參閱 驗證符號

另請參閱

Symbols

進階 SymSrv 使用

.sympath 命令

.symfix