Übersicht über die Grafikdiagnose

Die Grafikdiagnose hilft Ihnen, Renderingfehler in DirectX-Spielen und -Apps zu debuggen.

Visual Studio 2013-Anforderungen

Um die Grafikdiagnose in Visual Studio 2013 zu verwenden, müssen Sie eine dieser Editionen besitzen:

  • Visual Studio 2013 Ultimate

  • Visual Studio 2013 Premium

  • Visual Studio 2013 Professional

  • Visual Studio 2013 Express für Windows

Hinweis

Visual Studio 2013 Express für Windows Desktop unterstützt die Grafikdiagnosefunktionen nicht.

Betriebssystem- und SDK-Anforderungen

Windows Software Development Kit (SDK) für Windows 8.1 installiert die Laufzeitkomponenten, die von der Grafikdiagnose benötigt werden, und unterstützt die Entwicklung für Windows 8.1 und Windows 8. Um die Grafikdiagnose in Windows 7 und Windows Vista zu verwenden, müssen Sie eines der folgenden SDKs installieren:

  • Windows SDK (Version 7.1)

  • DirectX SDK (Juni 2010)

DirectX-Versionskompatibilität

Die Grafikdiagnose unterstützt Apps, die Direct3D 10, Direct3D 10.1, Direct3D 11, Direct3D 11.1 und Direct3D 11.2 verwenden, und bietet eingeschränkte Unterstützung für Apps, die Direct2D verwenden. Sie unterstützt keine Apps, die frühere Versionen von Direct3D und DirectDraw verwenden oder andere Grafik-APIs.

Windows 8.1 und Direct3D 11.2

In Windows 8.1 führt DirectX 11.2 neue Funktionen ein, u. a. die Unterstützung von Grafikinformationen während der Laufzeit. Windows 8.1 verwendet die neue laufzeitbasierte Erfassung – die als stabile Erfassung bekannt ist—exklusiv für alle Versionen von DirectX, die Windows 8.1 unterstützt. Die stabile Erfassung unterstützt auch neue Funktionen von Direct3D 11.2.

Windows 8- und Windows 7-Unterstützung

Da vorherige Versionen von Windows DirectX 11.2 nicht unterstützen, steht die stabile Erfassung auf diesen Plattformen nicht zur Verfügung. Stattdessen verwenden Apps, die auf Windows 8 oder Windows 7 laufen, das vorherige, umleitungsbasierte Verfahren namens Legacy-Erfassung Da sie unter Windows 8.1 nicht unterstützt werden muss, ist die Legacy-Erfassung veraltet. Allerdings ist sie weiterhin verfügbar, um Apps zu unterstützen, die unter Windows 8 oder Windows 7 laufen.

Begrenzte Direct2D-Unterstützung

Da Direct2D eine Benutzermodus-API ist, die auf Grundlage von Direct3D erstellt wurde, können Sie mithilfe der Grafikdiagnose Renderingprobleme in Apps debuggen, die Direct2D verwenden. Es werden jedoch nur die zugrunde liegenden Direct3D-Ereignisse und keine Direct2D-Ereignisse auf höherer Ebene erfasst, sodass Direct2D-Ereignisse nicht in der Grafikereignisliste angezeigt werden. Außerdem ist die Beziehung zwischen Direct2D-Ereignissen und den resultierenden Direct3D-Ereignissen nicht immer nachvollziehbar, daher ist die Verwendung der Grafikdiagnose zum Debuggen von Renderingproblemen in Apps, die Direct2D verwenden, nicht ganz einfach. Sie können die Grafik-Diagnose aber verwenden, um Informationen zu Problemen abzurufen, die in Direct2D-Apps beim Rendern auf unterster Ebene auftreten.

Änderungen an der Benutzeroberfläche in Visual Studio 2013 Update 3

Ab Visual Studio 2013 Update 3 werden die Fenster des Grafikdiagnosetools in einer unabhängigen Kopie der Visual Studio-Shell gehostet, um die Anzahl der Toolfenster zu reduzieren, die den begrenzten Platz in der Haupt-Visual Studio-IDE beanspruchen. Die benutzerdefinierte Shell hostet jetzt die Grafikdiagnosetools, genannt Visual Studio Grafik-Analyse, entfernt Menüs und Optionen, die bei der Grafikdiagnose nicht benötigt werden, aber ansonsten ähneln die Grafikdiagnose-Tools und Workflows der Grafikdiagnose in früheren Versionen von Visual Studio.

Es gibt zwei wichtige Unterschiede:

  1. Wenn Sie Ihre Anwendung unter Grafikdiagnose ausführen, zeigt Visual Studio keine Live-Version des Dokuments Grafikprotokoll an. Stattdessen bietet Visual Studio eine neue Aufnahmeschnittstelle. Erscheinungsbild der neuen Aufnahmeschnittstelle:

    Das GPU-Auslastungstool.

    Über diese Schnittstelle können Sie einzelne oder mehrere Frames im Grafikprotokoll erfassen und Echtzeit-Diagramme anzeigen, die die Framerate Ihrer App sowie die Zeit in Millisekunden anzeigen, die die einzelnen Frames zum Rendern benötigen.

  2. Sie können Code in der Grafik-Analyse-Shell nicht bearbeiten; Wenn Sie Code für die Bearbeitung in Grafik-Analyse öffnen, wird es in der Haupt-Visual Studio-IDE geöffnet und erhält den Fokus.

Die Schnittstelle ist das, was Sie in Visual Studio sehen. Wählen Sie zum Starten von Visual Studio Grafik-Analyse einen der Frames über den Link Frame... oberhalb der Miniaturansicht aus, oder doppelklicken Sie auf die Miniaturansicht.

Verwenden der Grafikdiagnose zum Debuggen von Renderingproblemen

Das Debuggen von Renderingproblemen in einer grafisch aufwendigen App ist kein einfaches Starten des Debuggers und die schrittweise Untersuchung des Codes. In jeden Frame werden Hunderttausende eindeutige Pixel erzeugt, wobei jedes einen komplexen Satz aus Zustand, Daten, Parameter und Code enthält – und von diesen Pixeln liefern möglicherweise nur wenige Hinweise auf das Problem, das Sie zu diagnostizieren versuchen. Darüber hinaus wird der Code, der die einzelnen Pixel generiert, auf spezialisierter Hardware ausgeführt, die Hunderte Pixel parallel verarbeitet. Herkömmliche Debugtools und -techniken, für die bereits Code mit wenigen Threads ein Problem darstellt, sind bei so großen Datenmengen wirkungslos.

Die Grafikdiagnose-Tools in Visual Studio wurden für die Suche nach den Ursprüngen von Renderingproblemen entwickelt. Sie beginnen mit den visuellen Artefakten, die auf das Problem hinweisen, und verfolgen dann das Problem zurück zu seinem Ursprung, wobei der Fokus auf den zugehörigen Shader-Code, die Grafikpipelinestufen, die Zeichnen-Aufrufe, die Ressourcen, den Gerätezustand und sogar auf den Quellcode der App gelegt wird.

Im Folgenden sind einige Arten von Renderingproblemen aufgeführt, bei denen Visual Studio Ihnen helfen kann.

  • Gerätezustand
    Die richtige Konfiguration des grafischen Gerätes ist wichtig, da sie bestimmt, wie die Grafikpipeline die den einzelnen Zeichnen-Aufrufen zugeordneten Daten interpretiert, und wie die Ausgaben von Zeichnen-Aufrufen zusammengeführt werden. Wenn der Gerätezustand beispielsweise die Vertex-Wicklungsreihenfolge im Uhrzeigersinn vorgibt, wird kein Modell ordnungsgemäß gerendert, das Vertizes in einer Reihenfolge gegen den Uhrzeigersinn festlegt. Auf dem Gerätezustand beruhende Probleme können schwer zu diagnostizieren sein, weil die Wurzel des Problems im Quellcode häufig weit entfernt von den betroffenen Objekten ist. Mit der Grafikdiagnose können Sie jederzeit den aktuellen Gerätezustand während des Renderns anzeigen.

  • Nicht initialisierte oder falsche Konstantenpuffer und Parameter
    Grafik-Apps verwenden Konstantenpuffer und Parameter, um zusätzliche Daten an einen Zeichnen-Aufruf zu übergeben, oder um Zeichnen-Aufrufe festzulegen. Möglicherweise geben die Daten verschiedene Speicherorte oder Darstellungen für verschiedene Objekte an. Wenn diese Daten nicht initialisiert werden oder falsche Werte enthalten, wird das entsprechende Objekt falsch oder möglicherweise überhaupt nicht gerendert. Es kann schwierig sein, diese Art des Problems zu diagnostizieren, da nicht immer klar ist, ob das Problem von den Daten verursacht wird, oder vom Shader-Code, der sie verwendet. Es kann auch schwierig sein, zu ermitteln, welche Shader, Konstantenpuffer und Parameter dem Fehler zuzuordnen sind. Mithilfe der Grafikdiagnose können Sie bestimmen, welche Shader, Konstantenpuffer und Parameter welchen Zeichnen-Aufrufen zuzuordnen sind, und deren Inhalte anzeigen.

  • Shaderfehler
    Dass sich in den App-Code Fehler einschleichen, ist fast unvermeidlich, unabhängig davon, ob der Code in C++ oder High-Level Shader Language (HLSL) erstellt wurde. HLSL-Code war bisher nur schwer zu debuggen, weil dafür nicht die umfassende Debugunterstützung zur Verfügung stand, die C++ und andere Sprachen nutzen können. Die Grafikdiagnose wendet herkömmliche Codedebugtools auf HLSL an, sodass Sie den Code schrittweise durchlaufen, Haltepunkte festlegen und den Inhalt von Variablen, Parametern und von Konstantenpuffern untersuchen können.

So funktioniert die Grafikdiagnose

Zeichnen Sie zur Verwendung der Grafikdiagnose zuerst Informationen darüber auf, wie eine App die Direct3D-API während der Ausführung verwendet, und untersuchen Sie später das aufgezeichnete Verhalten. Die aufgezeichneten Informationen enthalten API-Aufrufe für festgelegte Frames, zum Beispiel Aufrufe zum Löschen des Bildschirminhalts, Zeichnen von Geometrien, Verteilen von Compute-Shadern oder Ändern des Grafikgerätzustands, sowie deren Argumente und Kopien von Puffern und Objekten, auf die indirekt verwiesen wird. Außerdem werden API-Aufrufe, die mit der Einrichtung und Initialisierung in Verbindung stehen, vor dem Rendern jeglicher Frames aufgezeichnet. Die aufgezeichneten Informationen werden in eine Datei des Grafikprotokolls (.vsglog) geschrieben.

Sie können das in den Grafikprotokollen erfasste Renderingverhalten neu erstellen, indem Sie die Grafikereignisse auf dem Entwicklungscomputer oder einem Remotecomputer bzw. -gerät wiedergeben. Als Wiedergabecomputer können derselbe Computer oder dasselbe Gerät verwendet werden, auf dem das Grafikprotokoll ursprünglich aufgezeichnet wurde, oder ein anderes Gerät. In den meisten Wiedergabefunktionen wird die Grafikhardware des Wiedergabecomputers zur Wiedergabe von Grafikereignissen verwendet. Bei Verwendung des HLSL-Debuggers wird jedoch der Shader-Code immer mithilfe eines emulierten GPUs auf der CPU wiedergegeben. Die Verwendung eines emulierten GPUs ermöglicht die schrittweise Ausführung des Shader-Codes, die Überprüfung von Variablen und die Verwendung anderer gängiger Debugfunktionen, und zwar unabhängig davon, ob die Grafikhardware im Wiedergabecomputer das Debugging von Hardware unterstützt.

Hinweis

Obwohl ein Grafikprotokoll die meisten relevanten Informationen intern erfasst, sind zusätzliche Informationen erforderlich, damit einige Grafikdiagnosefunktionen vollständig verwendet werden können.Um beispielsweise die Grafikaufrufliste in vollem Umfang nutzen zu können, müssen Sie über die Programmdatenbankdatei (.pdb) und den Quellcode der App verfügen.Um HLSL-Shader-Quellcode zu debuggen, müssen Sie über den Shader-Quellcode verfügen.(Wenn der Shader mit dem Shadercompiler D3D11.1 kompiliert wird und die Debuginformationen aktiviert sind, wird der Shaderquellcode während der Erfassung in die Grafikprotokolle eingebettet.)

Hinweis

Da bestimmte APIs in vorherigen Versionen von Windows oder DirectX eventuell nicht verfügbar sind, können Sie Grafikprotokolle, in denen diese API-Aufrufe erfasst wurden, auf einem Wiedergabecomputer wiedergeben, der sie nicht unterstützt.

Grafikprotokolle

Ein Grafikprotokoll enthält einen oder mehrere Frames, die von einer ausgeführten DirectX-Grafikanwendung aufgezeichnet wurden. Da ein Grafikprotokoll in sich abgeschlossen ist, können diese Frames später schrittweise und ohne externe Informationen oder Verweise neu erstellt werden. Sie können Grafikprotokolle daher für andere Entwickler freigeben, Probleme auf unterschiedlichen Computern untersuchen und und alte Grafikprotokolle überprüfen, auch wenn die Modelle und die Texturen in der Entwicklung geändert wurden. Sie können ebenfalls mehrere Dateien des Grafikprotokolls (.vsglog) gleichzeitig laden, um Daten und Renderingergebnisse zu vergleichen.

So öffnen Sie eine Datei (VSGLOG) des Grafikprotokolls

  1. Wählen Sie in Visual Studio in der Befehlsleiste Datei, Öffnen und Datei. Das Dialogfeld Datei öffnen wird angezeigt.

  2. Geben Sie eine Datei (VSGLOG) des Grafikprotokolls an, die geöffnet werden soll, und wählen Sie dann die Schaltfläche Öffnen.

Hinweis

Sie können Kopien von Netzen und Texturen aus einem Grafikprotokoll extrahieren, ändern und speichern, indem Sie die Grafiktools verwenden, die in Visual Studio enthalten sind.Allerdings wird der Inhalt des Grafikprotokolls nicht von diesen Änderungen betroffen.Weitere Informationen zu diesen Grafiktools finden Sie unter Arbeiten mit 3D-Objekten für Spiele und Apps.

Grafiksymbolleiste

Die Grafiksymbolleiste bietet schnellen Zugriff auf Grafikdiagnosebefehle und Toolfenster.

Die Grafik-Symbolleiste im Grafikdiagnosemodus

Die Schaltfläche Diagnose starten führt die App unter der Grafikdiagnose aus. Wenn eine App unter der Grafikdiagnose ausgeführt wird, ist die Schaltfläche Das nächste gerenderte Bild aufzeichnen aktiviert, und Sie können die anderen Schaltflächen zum Anzeigen verschiedener Toolfenster verwenden. Weitere Informationen über das Ausführen einer App unter der Grafikdiagnose und das Erfassen von Grafikinformationen finden Sie unter Erfassen von Grafikinformationen.

Die Toolfenster der Grafikdiagnose

Die folgende Abbildung zeigt ein typisches Layout von Toolfenstern, die verwendet werden, um aufgezeichnete Frames zu überprüfen und zu debuggen. Jedes Fenster enthält eine andere Kategorie mit Informationen über den aufgezeichneten Frame und sogar über einzelne Pixel im Frame.

Alle Grafikdebuggerfenster

  • Mithilfe des Grafikprotokolldokument-Fensters können Sie bei Bedarf Renderingprobleme identifizieren.

  • Mithilfe der Grafikereignisliste können Sie Ereignisse identifizieren, die sich auf ein Renderingproblem beziehen.

  • Mithilfe des Grafikpipelinestufen-Fensters können Sie die Pipelinestufe identifizieren, in der ein Renderingproblem zuerst auftritt.

  • Mithilfe der Aufrufliste des Grafikereignisses können Sie den mit einem Renderingproblem zusammenhängenden App-Code suchen.

  • Mithilfe des Grafikpixelverlauf können Sie Details von Ereignissen überprüfen, welche die endgültige Farbe eines Pixels beeinflussen.

  • Mithilfe der Grafikobjekttabelle können Sie Details der mit einem Renderingproblem zusammenhängenden Objekte anzeigen.

DirectX-Systemsteuerung

Die DirectX-Systemsteuerung ist eine Komponente von DirectX, die Sie verwenden können, um das Verhalten von DirectX zu ändern. Sie können z. B. die Debugversion der DirectX-Laufzeitkomponenten aktivieren, die Art der Debugmeldungen festlegen, oder bestimmte Funktionen der Grafikhardware deaktivieren, um weniger leistungsfähige Hardware zu emulieren. Diese Einflussmöglichkeiten auf DirectX können Ihnen helfen, DirectX-Apps zu debuggen und zu testen. Sie können über Visual Studio auf die DirectX-Systemsteuerung zugreifen.

So öffnen Sie die DirectX-Systemsteuerung

  • Wählen Sie in der Menüleiste Debuggen, dann Grafiken und DirectX-Systemsteuerung.

Siehe auch

Konzepte

HLSL-Debugger