捕获图形信息

您可以获取图像信息来用于 Visual Studio 图像诊断工具来诊断呈现在基于 DirectX 应用程序的问题。

您可以获取图像信息手动或编程。若要手动捕获,请从 Visual Studio 运行应用程序,然后选择**“获取帧”** 按钮。若要以编程方式捕获,请在应捕获帧时在您的应用程序源代码中使用 Visual Studio 所含的获取 API。

您还可以防止正在从应用程序中获取的图像信息。

手动获取图像信息。

使用“图形诊断”工具栏上的**“捕获帧”**按钮,手动捕获来自正在运行的 Direct3D 应用程序的图形信息的帧。若要获取多个帧,请多次选择按钮。在您可以手动获取帧之前,您必须从 Visual Studio 开始 app 并将图像诊断启用。

Visual Studio 稍后使用捕获重新创建捕获帧的信息,以便您可以使用图形诊断工具来详细检查。

同时启动应用程序和图形诊断

  • 在菜单栏上,依次选择**“调试”“图形”“开始诊断”**。(键盘:按 Alt+F5)

在图形诊断挂钩应用程序之后,可以捕获许您想尽可能多的帧的图像信息。每次启动访问,与支持其的 Direct3D 对象和资源一起记录发生在下一个帧过程中的 Direct3D 事件。当前帧显示后立即开始记录,并在您想捕获的帧显示后结束记录。

捕获图形信息帧

  • 在“图形诊断”工具栏上,选择**“捕获框架”**按钮。“图形捕获按钮”图标(键盘:使用 app 焦点,请按“打印屏幕”)

当捕获第一个帧时,Visual Studio 创建图像日志来保存信息。其他捕获的帧添加到此日志。如果在应用程序运行时关闭 Visual Studio 中的图像记录 (.vsglog) 文档,则您再不能获取图像信息帧,但您仍可以使用 Visual Studio 调试器来调试它。若要获取更多图形信息,请停止调试该应用程序,然后使用**“开始诊断”** 命令重新启动该应用程序。

以编程方式获取图像信息。

有时取决于手动访问收集您尝试解决的一种呈现问题的信息不可能或无法的。例如,某些类型的问题可能由于间歇性过大而无法手动重现,但是,生成它的程序条件可能是已知的;或者您可能需要收集有关不支持手动捕获的系统的图形信息,因为这种系统不支持 Visual Studio,Windows RT 设备往往如此。这些方案,Visual Studio 包括可以以编程方式调用,用来将图形信息捕获到日志中的 API。在程序运行完成后,您可以打开 Visual Studio 中图形日志以调查所记录的问题。

有关如何在您的应用程序中启用编程捕获,以及如何配置将要运行之以支持编程捕获的计算机的信息,请参见 演练:以编程方式捕获图形信息

防止捕获图形信息

在发布您的应用程序之前,可以禁用图像诊断和其他分析工具阻止用户查看您的应用程序如何使用 Direct3D API。此信息可能使用不当。有关更多信息,请参见 如何:在应用程序中禁用图形诊断

图形日志文档

图形日志文档存储在图像诊断捕获会话期间收集的信息。可以手动或编程启动捕获会话。图形日志包含从正在运行的 DirectX 图形应用程序捕获的一帧或多帧。对于每个捕获的框架,框架中发生的每个 Direct3D 事件都会记录在列表中。这包括之前出现的支持 Direct3D 事件 — 例如,图形设备创建 — 和支持着色器、模型、纹理及其他图形资源。由于每个图像记录是独立的,这些帧可以在任何时间分步地重新创建,并且,而无需外部信息或引用。您可以共享图形记录,并且您可以检查计算机的问题,除了用于获取数据或开发代码的内容之外。此外,即使模型和纹理在开发过程中已更改,您也可以检查旧图形记录。当您使用图像诊断来诊断图像问题时,可以检查任何 Direct3D API 调用和其关联的状态,在缓冲区中的各个顶点甚至各个像素如何通过绘制调用影响。

说明说明

虽然图像记录捕获大部分内部相关信息,需要附加信息完全使用一些图形诊断功能。例如,要完全利用图形调用堆栈功能,还必须拥有程序数据库 (.pdb) 文件和应用程序的源代码,若要调试 HLSL 着色器源代码,您还必须具有着色器源代码(如果着色器使用 D3D11.1 着色器编译器编译,且调试信息启用,那么着色器源代码将在捕获过程中嵌入图形记录)。

说明说明

您可以通过使用是 Visual Studio 一部分的图形工具从图形日志提取、修改和保存网格和纹理的副本。但是,图形记录的内容不受这些修改的影响。有关这些图形工具的更多信息,请参见 为游戏和应用程序使用三维资产

请参见

任务

如何:在应用程序中禁用图形诊断

演练:手动捕获图形信息

演练:以编程方式捕获图形信息