跳轉到主要內容
PIX 能夠載入著色器 PDB (符號) 以啟用其他功能。如果您開啟擷取時有任何著色器的 PDB 未解析,PIX 會提示您提供其他搜尋路徑以找到 PDB。您也可以在 Settings 檢視中存取此控制項。 在 Pipeline 檢視或 Debugger 檢視中檢視著色器時,如果 PDB 未解析,您可以從檢視頂端的工具列開啟 Commands 面板來解析它。

PDB 的鬆散資料夾與 PDB 的 ZIP 封存

PIX 支援在 PDB 檔案以一組鬆散 *.pdb 檔案的形式組織在資料夾中時找到它們。此外,PIX 也支援找到儲存在 *.zip 封存內的 PDB。 視您的組建系統而定,使用 .zip 封存組織大量 PDB 可能會有好處。如需詳細資訊,請參閱「PDB 最佳做法」一節。

PDB 最佳做法

著色器組建系統可能會產生 10k+ 甚至 100k+ 的排列組合,因此會產生大量的著色器 PDB。幾項最佳做法可以大幅改善 PIX 為 GPU 擷取尋找所需 PDB 時的效能。
  1. 以著色器雜湊命名您的 PDB。編譯著色器時,您可以使用自訂指定的檔案名稱或著色器的雜湊將 PDB 儲存為 .pdb 檔案。建議您一律使用著色器的雜湊,因為這樣 PIX 稍後尋找 PDB 時會容易得多。這很容易做到:
  1. 考慮使用 .zip 封存組織大量 PDB 檔案,特別是超過 10k 個時。對於超過 10k 個 PDB 的數量,組織與列舉大量 PDB 檔案的成本可能很高。PIX 支援使用 .zip 封存儲存大量 PDB 集合並加快搜尋速度。為了獲得最佳結果,建議您的 PDB .zip 封存只包含 PDB 檔案 (不要壓縮包括其他非 .pdb 檔案在內的整個組建輸出),並一律遵循第 1 項建議,使用著色器雜湊命名檔案。
  2. 對於超過 100k 個的極大量 PDB 檔案,請考慮根據組建頻率將 PDB 檔案組織成多個 .zip 封存。如果 .zip 封存未變更,PIX 可以有效地略過列舉先前已掃描過的 .zip 封存,藉此節省時間。因此,對於極大型的組建系統,建議您將著色器 PDB 檔案組織成多個 .zip 封存,每個封存包含組建頻率相似的 PDB。這樣一來,如果您重新建置部分著色器,許多未變更的著色器就不需要更新其 PDB .zip 封存。作為起點建議,目標是讓每個 .zip 封存包含約 5k 到 50k 個 PDB (這不是硬性規定,只是良好的起點)。因此,擁有 250,000 個著色器排列組合的遊戲,可能會想根據遊戲的關卡、材質或圖形子系統,將 PDB 分割並組織成幾十個 .zip 封存。然後只需將 PIX 指向包含所有產生之 .zip 封存的目錄即可。對於這種數量的 PDB,為了獲得最佳效能,遵循第 1 項建議 (使用著色器雜湊命名檔案) 極為重要。

精簡 PDB

精簡 PDB 是在編譯著色器時使用 /Zs 產生的。產生的 PDB 只包含原始程式檔與編譯引數,不包含完整的偵錯資訊,但大小比完整 PDB 小得多。使用精簡 PDB 時,PIX 可以顯示著色器原始碼與編譯引數,但會停用著色器偵錯與內嵌 HLSL。若要使用這些功能,您可以從檢視頂端的工具列開啟 Commands 面板,以產生完整 PDB。 更新後的著色器會透過編輯後繼續顯示為編譯器選項編輯,並修補到播放中。如同任何其他編輯,PIX 會更新反組譯、事件計時、轉譯輸出,以及新著色器所變更的任何其他內容。 注意:如果使用不同版本的編譯器產生完整 PDB (PIX 隨附最新的編譯器),可能會因此產生不同的 IL 與 GPU 指令,PIX 會通知您其中的差異。若要使用特定編譯器,您可以取代 C:\Program Files (x86)\Microsoft GDK\bin\Scarlett\pixsc (適用於 XBOX Series X|S) 或 C:\Program Files (x86)\Microsoft GDK\bin\XboxOne\pixsc (適用於 XBOX One) 中的編譯器 DLL,然後重新開啟擷取。

儲存含有 PDB 的 PIX GPU 擷取

開啟 PIX GPU 擷取時,PIX 會嘗試從上述 PDB 搜尋路徑載入任何遺失的著色器 PDB。PIX 找到可用的著色器 PDB 之後,下次儲存時,.xpix 擷取檔案就會將這些 PDB 檔案內嵌到擷取中。如果 PDB 已內嵌在 .xpix 檔案中,日後開啟此 GPU 擷取時就不再需要從 PDB 搜尋路徑找到原始 PDB 檔案。當同事或其他人需要開啟並分析 PIX GPU 擷取時,這可以大幅簡化工作。最佳做法是在出現 “Shader PDB files have been resolved” 提示時儲存 PIX 擷取,讓 PIX GPU 擷取包含其所需的一切。 顯示 Shader PDB files have been resolved 訊息之 PIX 儲存提示的螢幕擷取畫面。

PDB 著色器雜湊與 PDB GUID

如果您手動命名 PDB 檔案或直接處理著色器雜湊本身,下列資訊會與您相關。 PDB GUID 與 PDB 著色器雜湊的值相同,都是 16 位元組的值。不過,如果您手動命名 PDB 檔案,應注意確保使用適當的位元組順序。PDB 著色器雜湊是 16 位元組的 byte[],而 PDB GUID 則是將相同資料視為 GUID,通常格式化為 。由於 Little Endian 行為,前 8 個位元組在這兩種表示法之間的順序會不同。請注意此差異,並根據您使用的工具小心使用適當的格式。

PDB Zip64 支援

PIX 支援使用 .zip 封存組織大量 PDB。不過,PIX 使用的 ZipArchive 程式庫不支援 Zip64 擴充功能。著色器 PDB 檔案的大小不足以需要使用 64 位元檔案大小,因此大多數 zip 工具都不需要使用 Zip64 擴充功能。但如果您的組建工具設計為使用此擴充功能,請在建立 PDB zip 封存時留意此相容性問題。

PIX 重新掃描 PDB

PIX 會在啟動時以及在 PIX 設定中新增新的 PDB 路徑時掃描 PDB 檔案。這可能導致一種情況:如果在 PIX 執行期間編譯著色器並建立新的 PDB,PIX 在關閉並重新啟動之前不會偵測到新檔案。為了協助緩解這種情況,PIX 中的 Rescan PDBs 按鈕會強制 PIX 重新檢查目前的 PDB 搜尋路徑,並適當處理任何新建立的 PDB 檔案。

PIX 著色器程式庫精簡 PDB

PIX 支援以著色器程式庫精簡 PDB (dxc -T lib_6_x -Zs -Fd) 編譯的光線追蹤著色器。使用此組合時,著色器會有多個與之相關聯的 PDB 檔案,分別來自每個個別的著色器程式庫以及光線追蹤狀態物件 (透過 ID3D12Device8::SetCompileTimeShaderPdbPathX 建立)。
最後修改於 2026年10月8日