共用方式為


圖形診斷概觀

圖形診斷可以協助您偵錯 DirectX 遊戲和應用程式的轉譯錯誤。

Visual Studio 2013 需求

若要使用在 Visual Studio 2013 中使用圖形診斷,您必須具有下列其中一項:

  • Visual Studio 2013 Ultimate

  • Visual Studio 2013 Premium

  • Visual Studio 2013 Professional

  • Visual Studio 2013 Express for Windows

注意事項注意事項

Visual Studio 2013 Express for Windows Desktop 不支援圖形診斷功能。

作業系統和 SDK 需求

適用於 Windows 8.1 的 Windows Software Development Kit (SDK) 會安裝圖形診斷所需的執行階段元件,並支援 Windows 8.1 和 Windows 8 的開發。 若要在 Windows 7 和 Windows Vista 上使用圖形診斷,您必須安裝下列其中一種 SDK:

  • Windows SDK (7.1 版)

  • DirectX SDK (2010 年 6 月)

DirectX 版本相容性

圖形診斷支援使用 Direct3D 10、Direct3D 10.1、Direct3D 11、Direct3D 11.1 和 Direct3D 11.2 的應用程式,並為使用 Direct2D 的應用程式提供有限的支援。 不支援使用舊版 Direct3D、DirectDraw 或其他圖形應用程式開發介面的應用程式。

Windows 8.1 和 Direct3D 11.2

在 Windows 8.1 中,DirectX 11.2 引進支援透過其執行階段擷取圖形資訊的新功能。 Windows 8.1 使用專門針對 Windows 8.1 所支援之所有 DirectX 版本的新執行階段擷取,又稱為「穩固擷取」(robust capture)。 穩固擷取也支援 Direct3D 11.2 的新功能。

Windows 8 和 Windows 7 支援

因為舊版 Windows 不支援 DirectX 11.2,所以在那些平台上無法使用穩固擷取。 在 Windows 8 或 Windows 7 上執行的應用程式,則會使用先前的繞道擷取方法,亦稱為「舊版擷取」(legacy capture)。 因為 Windows 8.1 上不需要支援舊版擷取,所以舊版擷取已被取代;不過,還是可用來支援在 Windows 8 或 Windows 7 上執行的應用程式。

有限的 Direct2D 支援

由於 Direct2D 是一個建置於 Direct3D 之上的使用者模式應用程式開發介面,您可以使用圖形診斷協助偵錯 Direct2D 應用程式中的轉譯問題。 不過,由於只會記錄基礎 Direct3D 事件,而不會記錄較高層級的 Direct2D 事件,所以 Direct2D 事件不會出現在圖形事件清單。 此外,由於 Direct2D 事件與產生 Direct3D 事件之間的關聯性並不一定是明確的,因此對 Direct2D 應用程式使用圖形診斷並不簡單。 儘管如此,您可以使用圖形診斷取得那些使用 Direct2D 應用程式的低階轉譯問題的資訊。

Visual Studio 2013 Update 3 中的使用者介面變更

從 Visual Studio 2013 Update 3 開始,圖形診斷工具視窗皆裝載在 Visual Studio Shell 的獨立複本中,以減少在主要 Visual Studio IDE 中競用有限空間的工具視窗數目。 現在裝載圖形診斷工具的自訂殼層 (稱為「Visual Studio 圖形分析」) 消除了圖形診斷不需要的功能表和選項,除此以外,圖形診斷工具和工作流程皆類似舊版 Visual Studio 中的圖形診斷。

有兩個顯著的差異:

  1. 當您在圖形診斷下執行您的應用程式時,Visual Studio 不再顯示圖形記錄文件的即時版本。 相反地,Visual Studio 則提供新的擷取介面。 新擷取介面如下所示:

    GPU 使用工具。

    您可以在這個介面中,將單一或多個畫面格擷取至圖形記錄檔,並檢視可顯示應用程式畫面播放速率的即時圖形,以及呈現每個畫面格所花費的時間 (以毫秒為單位)。

  2. 您無法在 [圖形分析] 殼層中編輯程式碼;如果您在 [圖形分析] 中開啟程式碼來進行編輯,它將會在主要 Visual Studio IDE 中開啟並給予焦點。

這個介面就是您在 Visual Studio 中看到的內容。 若要啟動 Visual Studio 圖形分析,請依照 [畫面格 …] 連結上方的影像縮圖或按兩下縮圖,來選擇其中一個畫面格。

使用圖形診斷偵錯轉譯問題

在具有豐富圖形的應用程式中偵錯轉譯問題,並不像啟動偵錯工具和逐步執行某些程式碼一樣簡單。 在每個框架中會根據狀態、資料、參數和程式碼的複雜來產生數十個唯一的像素,其中可能只有一些像素會出現您嘗試診斷的問題。 讓問題更複雜的情況是,產生各個像素的程式碼是在平行處理數百個像素的特殊硬體上執行。 傳統偵錯工具和技術 (即使在輕量的執行緒程式碼中也難以充分利用) 在面臨大量資料時的效果不佳。

Visual Studio 的圖形診斷工具的目的是要協助您尋找轉譯問題,方式是開始使用可以識別問題的視覺成品,然後透過專注在相關的著色器程式碼、管線階段、繪製呼叫、資源和裝置狀態,在應用程式本身的原始程式碼中向後追蹤。

以下是 Visual Studio 可協助您解決的一些轉譯問題類型。

  • 裝置狀態
    圖形裝置的正確組態很重要,因為它會判斷圖形管線如何解譯與每個繪製呼叫相關的資料,以及合併繪製呼叫輸出的方法。 例如,若裝置狀態指定了順時針的頂點彎曲順序,則無法正確呈現任何以逆時針順序指定頂點的模型。 由於原始程式碼中問題的根源通常與受影響的物件有一段距離,因此很難診斷裝置狀態的問題。 藉由使用圖形診斷,您就可以在轉譯期間隨時檢視目前的裝置狀態。

  • 未初始化或不正確的常數緩衝區和常數
    圖形應用程式會使用常數緩衝區和參數來傳遞其他資料給某個繪製呼叫或一組繪製呼叫。 例如,資料可能為不同的物件指定了不同的位置或外觀。 當該資料未初始化或未包含無效的值時,可能會使對應的物件無法正確呈現,甚至是沒有呈現。 這種問題非常難以診斷,因為永遠無法釐清問題是出現在資料或是使用資料的著色器程式碼中。 判斷哪些著色器、常數緩衝區和參數與錯誤有關也不是一件簡單的事。 您可以使用圖形診斷來判斷套用至每個繪製呼叫的著色器、常數緩衝區與參數,並檢視其內容。

  • 著色器 Bug
    不論程式碼是 C++ 還是高階著色器語言 (HLSL),在應用程式程式碼中產生錯誤幾乎無可避免。 不過,因為沒有 C++ 和其他語言所享有的豐富偵錯支援,偵錯 HLSL 程式碼在傳統上一直都比較困難。 圖形診斷為傳統程式碼偵錯工具帶來 HLSL,讓您可以逐步執行程式碼、設定中斷點,以及檢查變數、參數及常數緩衝區的內容。

圖形診斷的運作方式

若要使用圖形診斷,您必須先在程式執行時記錄與應用程式如何使用 Direct3D 應用程式開發介面的資訊,然後再檢查所記錄的行為。 針對指定的框架,記錄的資訊包含 API 呼叫 (例如清除螢幕、繪製幾何、分派計算著色器或變更圖形裝置狀態) 和其引數,以及間接參考的緩衝區和物件的副本。 此外,會先記錄與設定及初始化相關的 API 呼叫,再呈現框架。 記錄的資訊會寫入「圖形記錄」(Graphics Log) (.vsglog) 檔案中。

您會在開發電腦、遠端電腦或裝置上播放圖形事件以重新建立圖形記錄中記錄的轉譯行為。 播放電腦可以與原本擷取圖形記錄相同的電腦或裝置,或是不同的電腦或裝置。 大部分的播放功能會使用播放電腦的圖形硬體會來播放圖形事件,但是,如果使用的是 HLSL 偵錯工具,則著色器程式碼一定會使用 CPU 上的模擬 GPU 來播放圖形事件。 無論播放電腦的圖形硬體是否支援硬體偵錯,使用模擬的 GPU 可透過著色器逐步執行程式碼、檢查變數及使用其他常見的偵錯功能。

注意事項注意事項

雖然圖形記錄會擷取內部的大部分相關資訊,不過若要完整使用某些圖形診斷功能,則還需要其他資訊。例如,若要充分利用圖形呼叫堆疊功能,您還必須提供程式資料庫 (.pdb) 檔案和應用程式的原始程式碼。若要偵錯 HLSL 著色器原始程式碼,您必須提供著色器原始程式碼(如果著色器是使用 D3D11.1 著色器編譯器進行編譯,而且已啟用偵錯資訊,則會在擷取時將著色器原始程式碼內嵌在圖形記錄中)。

注意事項注意事項

因為可能無法在舊版 Windows 或 DirectX 中使用特定 API,所以您無法在不支援這些 API 的播放電腦上播放擷取這些 API 呼叫的圖形記錄。

圖形記錄

圖形記錄包含一個或多個擷取自執行中 DirectX 圖形應用程式的框架。 由於圖形記錄是獨立的 (Self-Contained),因此沒有外部資訊或參考,也可以在稍後重新建立這些框架。 這表示您可以與其他開發人員共用圖形記錄、在不同電腦上檢查問題,以及檢查舊的圖形記錄,即使在開發時已變更模型和紋理。 您也可以同時載入多個圖形記錄 (.vsglog),以比較資料和呈現結果。

開啟圖形記錄 (vsglog) 檔

  1. 在 Visual Studio 的功能表列上,選擇 [檔案]、[開啟]、[檔案]。 [開啟檔案] 對話方塊隨即出現。

  2. 指定圖形記錄 (.vsglog) 開啟的檔案,然後選取 [開啟] 按鈕。

注意事項注意事項

您可以擷取、修改及儲存圖形中的網狀結構和紋理,方法是使用 Visual Studio 的圖形工具。不過,這些修改不會影響圖形記錄的內容。如需這些圖形工具的詳細資訊,請參閱使用 3D 資產來打造遊戲和應用程式

圖形工具列

圖形工具列可快速存取圖形診斷的命令和工具視窗。

圖形診斷模式中的 [圖形] 工具列

在 [開始診斷] 按鈕會啟在 [圖形診斷] 下執行應用程式。 在圖形診斷下執行應用程式時,會啟用 [擷取下一個呈現的畫面格] 按鈕,您可以使用其他按鈕來檢視不同的工具視窗。 如需如何在圖形診斷下執行應用程式和擷取圖形資訊的詳細資訊,請參閱擷取圖形資訊

圖形診斷工具視窗

下圖顯示工具視窗的典型版面配置,它可用來檢查和偵錯已擷取的框架。 每個視窗都會公開不同分類的資訊,這些資訊是針對檢查中已擷取框架 (或甚至是框架中的個別像素) 所擷取的資訊。

所有圖形偵錯工具視窗

DirectX 控制台

DirectX 控制台是可以用來變更 DirectX 行為的 DirectX 元件。例如,您可以啟用 DirectX 執行階段元件的偵錯版本,選取要報告的偵錯訊息種類和禁止某些圖形硬體功能去模擬功能很少的硬體。 這個 DirectX 控制層級可以協助您偵錯及測試 DirectX 應用程式。 您可以從 Visual Studio 存取 DirectX 控制台。

開啟 DirectX 控制台

  • 在功能表列上,選擇 [偵錯]、[圖形]、[DirectX 控制台]。

請參閱

概念

HLSL 偵錯工具