用户指南
如何设置和检查 GPU 崩溃转储
本节介绍如何使用 NVIDIA Nsight Aftermath 监视器为使用 Direct3D 12 或 Vulkan API 的应用程序生成 GPU 崩溃转储,以及如何在 Nsight Graphics 中使用崩溃转储检查器插件打开和检查这些 GPU 崩溃转储。
或者,开发人员还可以使用 NVIDIA Nsight Aftermath SDK 将 GPU 崩溃转储收集支持添加到他们的图形应用程序中。
工作流程
使用 Nsight Aftermath GPU 崩溃转储的通用工作流程是:
运行 NVIDIA Nsight Aftermath GPU 崩溃转储监视器。
配置所需的 GPU 崩溃转储功能。
可选:如果您想通过事件标记收集其他信息,您可以选择使用 Aftermath SDK 检测图形应用程序。
运行要捕获 GPU 崩溃转储的图形应用程序并重现 GPU 崩溃或挂起,允许监视器收集 GPU 崩溃转储。
打开 Nsight Graphics 中的 GPU 崩溃转储。
配置 GPU 崩溃转储检查器设置。
检查 使用 Nsight Graphics 崩溃转储检查器的崩溃转储数据。
请参阅以下各节,了解此过程每个步骤的详细信息。
GPU 崩溃转储监视器
NVIDIA Nsight Aftermath 崩溃转储监视器提供了捕获 GPU 崩溃或 GPU 挂起的 GPU 崩溃转储文件的方法,并修改与崩溃转储生成相关的驱动程序配置设置。
运行 GPU 崩溃转储监视器
NVIDIA Nsight Aftermath 监视器 nv-aftermath-monitor.exe 安装到 Nsight Graphics 主机目录。通常是:
<install directory>\host\windows-desktop-nomad-x64
崩溃转储监视器应用程序默认情况下将在后台启动。其用户界面可通过 Microsoft Windows 系统通知区域(系统托盘)中的 NVIDIA Nsight Aftermath 监视器图标访问。
配置 GPU 崩溃转储监视器
所有与 GPU 崩溃转储创建相关的配置选项都可通过 GPU 崩溃转储监视器设置对话框获得。
设置存储崩溃转储文件的目录。
设置存储着色器调试信息文件的目录。
启用 Aftermath GPU 崩溃转储收集。将Aftermath 模式设置为全局,为所有使用 D3D12 或 Vulkan API 的应用程序启用崩溃转储,或者通过管理应用程序白名单,有选择地为一个或多个应用程序启用崩溃转储。
启用所需的 Aftermath 图形驱动程序功能
生成着色器调试信息,为应用程序加载的所有着色器生成着色器调试信息(用于从传递给 NVIDIA 图形驱动程序的着色器 IL 映射到 GPU 执行的着色器微代码的行表)。
GPU 崩溃转储监视器会将调试信息存储到扩展名为
.nvdbg
的文件中,该文件位于 常规设置选项卡的 GPU 崩溃转储监视器设置中配置的 调试信息转储目录 目录中。着色器调试信息是必需的,用于将活动或错误着色器 Warp 的着色器微代码指令映射到着色器 IL 或着色器源行。
另请参阅关于 源着色器调试信息 的章节,了解如何使用源级调试信息编译着色器源。
启用资源跟踪,以启用对实时和最近销毁的资源的额外驱动程序端跟踪。
这允许 Aftermath 识别与 GPU 页面错误导致的崩溃中看到的 GPU 虚拟地址相关的资源。正在跟踪的资源信息包括有关资源大小、格式和资源对象的当前删除状态的详细信息。D3D12 开发人员还可以考虑使用
GFSDK_Aftermath_DX12_RegisterResource
函数检测应用程序,以注册应用程序创建的 D3D12 资源。这将允许 Aftermath 跟踪其他信息,例如应用程序设置的资源调试名称。对于 Vulkan 应用程序,也将捕获通过vkSetDebugUtilsObjectNameEXT
设置的资源调试名称。启用调用堆栈捕获,以启用自动生成 Aftermath 事件标记,用于跟踪应用程序启动的所有绘制调用、计算和光线追踪调度、光线追踪加速结构构建操作或资源复制的来源。
自动事件标记在命令流中紧随相应的命令之后添加,并将记录命令的函数的 CPU 调用堆栈作为数据有效负载。
注意
启用此功能将导致驱动程序产生相当大的开销,以收集必要的信息。
注意
启用此功能后,GPU 崩溃转储文件可能包含崩溃应用程序的可执行文件的文件路径以及它已加载的所有 DLL 或 DSO 的文件路径。
启用着色器错误报告,以启用一种特殊模式,允许 GPU 报告其他运行时着色器错误。这可能在调试与着色器执行相关的挂起、崩溃或意外行为时提供其他信息。
启用此功能可能会导致额外的崩溃转储报告着色器中出现未定义行为或隐藏错误的问题,这些问题到目前为止一直未被注意到,因为默认情况下硬件会默默地忽略它们。使用此选项启用的其他错误检查将导致以下情况的 GPU 异常:
使用未对齐的地址访问内存,例如读取或写入不是访问大小倍数的字节地址。
访问超出范围的内存,例如读取或写入超出(组)共享或线程局部内存的声明范围,或者从超出范围的常量缓冲区地址读取。
使用不兼容的格式或内存布局访问纹理。
达到调用堆栈限制。
注意
此功能仅在 NVIDIA 图形驱动程序 R515 或更高版本中受支持。
注意
在 Windows 上,修改 Aftermath 图形驱动程序设置需要 Windows 管理员权限。因此,当修改和应用这些设置中的任何一个时,可能会弹出一个用户帐户控制确认窗口,请求修改系统设置的权限。
启用所需的 Aftermath 系统范围功能
启用 SM 寄存器数据收集,以在 SM 内部发生故障时收集 SM 寄存器值。这可以在调试与着色器执行相关的 GPU 崩溃时提供其他信息。
由于这是一个系统设置,修改它也可能影响其他工具,例如 Nsight VSE CUDA 调试器,并可能导致意外行为!在 Linux 上,此功能始终启用,与其他工具没有不兼容性。
注意
此功能仅适用于 NVIDIA 图形驱动程序 R535 或更高版本的 D3D12 和 Vulkan API,并且需要 Nsight Graphics Pro 才能可视化数据。
注意
在 Windows 上,修改 Aftermath 系统设置需要 Windows 管理员权限。因此,当修改和应用这些设置中的任何一个时,可能会弹出一个用户帐户控制确认窗口,请求修改系统设置的权限。
GPU 崩溃转储检查器
NVIDIA Nsight Aftermath 崩溃转储检查器提供了打开、检查和分析 NVIDIA Nsight Aftermath 监视器创建的 GPU 崩溃转储文件的方法。
加载 GPU 崩溃转储文件
GPU 崩溃转储文件使用 .nv-gpudmp
文件扩展名,可以通过文件 > 打开文件... 加载。这将弹出一个 GPU 崩溃转储检查器 窗口,显示崩溃转储文件的内容。
配置 GPU 崩溃转储检查器
为了使用 GPU 崩溃转储检查器提供的所有功能,应在 搜索路径设置中进行以下配置设置。
将存储二进制着色器文件(DXIL 或 SPIR-V 着色器文件)的目录添加到 着色器二进制文件。如果找不到二进制着色器,着色器视图 将无法显示中间着色器汇编代码或着色器源代码。
有关如何生成这些文件的更多信息,请参阅 源着色器调试信息。
将存储单独的着色器调试信息文件(例如,
dxc.exe
生成的.lld
或.pdb
文件)的目录添加到 单独的着色器调试信息。如果找不到着色器调试信息,着色器视图 将无法将活动或错误 Warp 的 GPU PC 地址映射到中间着色器汇编或着色器源代码位置。有关如何生成这些文件的更多信息,请参阅 源着色器调试信息。
将 GPU 崩溃转储监视器生成的 NVIDIA 着色器调试信息文件存储的目录添加到 NVIDIA 着色器调试信息。如果找不到 NVIDIA 着色器调试信息,着色器视图 将无法将活动或错误 Warp 的 GPU PC 地址映射到中间着色器汇编或着色器源代码位置。
可选地,将存储着色器源文件的目录添加到 着色器源。通常,这不是必需的,因为着色器调试信息已经包含着色器源。仅当着色器是从包含对其他源文件的引用的源编译时(例如,通过
#line
指令),才可能需要指定其他源目录,以便 着色器视图 能够找到正确的着色器源。添加用于查找已捕获 GPU 崩溃转储的图形应用程序的符号文件的目录到 应用程序调试信息。这允许 Aftermath 标记调用堆栈视图 将地址解析为函数和源位置。
检查 GPU 崩溃转储文件
使用 GPU 崩溃转储检查器 分析崩溃原因。这不是关于如何分析 GPU 崩溃转储的详尽教程,因为每次崩溃或挂起都不同,但它应该提供一些入门提示。
加载崩溃转储文件后,通常最好先检查 转储信息 选项卡上的 异常摘要。这将显示高级故障原因,例如,图形设备是否已挂起或是否发生了页面错误等错误。如果发生页面错误或着色器错误,此部分将包含分析,其中提及潜在原因,并提供指向 崩溃信息 选项卡和 着色器视图 中相关信息的链接。
如果发生挂起,则有必要检查 转储信息 选项卡上是否有 活动 Warp 部分显示着色器活动。这可能指向运行时间非常长的着色器 Warp 或卡在无限循环中的着色器 Warp 的问题。在这种情况下,着色器视图 可能有助于找到问题的根本原因。
如果设备状态表明存在内存故障,则下一步是查找 转储信息 选项卡上的 页面错误 部分。这可能有助于查明超出范围的资源访问或访问已删除的资源的问题。
如果应用程序使用 Aftermath 事件标记 进行检测,则 转储信息 选项卡上应提供 Aftermath 标记 部分。这可能有助于查明导致问题的绘制或调度调用。
如果在捕获 GPU 崩溃转储时启用了 调用堆栈捕获,则 Aftermath 标记部分中应提供调用堆栈链接,指向可能与问题相关的绘制、调度或复制调用。
最后,转储信息 选项卡上的 GPU 状态 部分可能会提供一些关于崩溃发生时图形管线的哪些部分处于活动状态或发生故障的提示。
使用 Aftermath API 检测应用程序
NVIDIA Nsight Aftermath SDK 提供了 Aftermath API,开发人员可以使用该 API 来检测他们的应用程序。最新版本可以从 https://developer.nvidia.com/nsight-aftermath 下载。
有关库提供的功能以及如何在应用程序中使用它的详细信息,可以在 SDK 包附带的 Readme.md 和头文件中找到。
Aftermath 事件标记
在 D3D 应用程序中,Aftermath 事件标记 API (GFSDK_Aftermath_SetEventMarker
) 可用于将带有用户定义数据的事件标记直接注入到图形命令流中。如果应用程序使用事件标记进行检测,则将 GPU 为每个命令流处理的最后一个事件标记的信息捕获到 GPU 崩溃转储中,包括用户提供的事件数据。
注意
应仔细考虑使用事件标记。在高频率代码路径中注入标记可能会引入较高的 CPU 开销。因此,在某些驱动程序版本上,仅当 Nsight Aftermath GPU 崩溃转储监视器在系统上运行时,事件标记功能才可用。此要求适用于 DX12 的 R495 至 R530 驱动程序和 DX11 的 R495+ 驱动程序。无需在监视器中进行任何 Aftermath 配置。它仅作为加密狗,以确保 Aftermath 事件标记不会影响最终用户系统上的应用程序性能。
对于 Vulkan 应用程序,VK_NV_device_diagnostic_checkpoints
扩展提供了类似的功能。
源着色器调试信息
为了将活动或错误着色器 Warp 的着色器指令地址映射到高级着色器源,需要使用调试信息编译着色器。由于着色器编译是一个两步过程 - 从着色器源(如 HLSL 或 GLSL)编译到中间着色器语言表示形式(如 DXIL 或 SPIR-V),以及图形驱动程序级别的着色器 IL 编译到 GPU 执行的实际微代码 - 因此需要两个级别的调试信息才能完成此类映射。本节介绍如何使用 Microsoft DirectX Shader Compiler 或 Vulkan SDK 工具链进行着色器编译,使用适合 Aftermath GPU 崩溃转储检查器使用的调试信息来编译着色器源代码。
微代码级别的着色器调试信息的生成需要通过 Nsight Aftermath GPU 崩溃转储监视器设置 或使用 Nsight Aftermath SDK 时的 Aftermath 功能标志来启用。
要在 Nsight Graphics 中分析崩溃转储时启用着色器指令映射,必须通过设置 搜索路径设置 来提供调试信息,如 配置 GPU 崩溃转储检查器 中所述。
对于 D3D12,Aftermath 支持使用 Microsoft DirectX Shader Compiler (dxc.exe) 编译带有调试信息的着色器的以下变体:
编译并使用完整着色器 Blob:使用调试信息编译着色器。运行应用程序时使用完整(即,未剥离)着色器二进制文件,并在检查 GPU 崩溃转储时通过将存储编译结果的磁盘位置添加到 着色器二进制文件 搜索路径,使其可供 Nsight Graphics 访问。
示例命令行可能如下所示:
dxc -Zi [..] -Fo shader.bin shader.hlsl
编译并剥离: 使用调试信息编译着色器,然后剥离调试信息。运行应用程序时使用剥离的着色器二进制文件,并在检查 GPU 崩溃转储时使剥离和未剥离的文件都可供 Nsight Graphics 访问。将剥离文件的磁盘位置添加到 着色器二进制文件 搜索路径,并将未剥离文件的磁盘位置添加到 单独的着色器调试信息 搜索路径。
示例命令行可能如下所示:
dxc -Zi [..] -Fo full_shader.bin shader.hlsl dxc -dumpbin -Qstrip_debug -Fo shader.bin full_shader.bin
使用单独的调试信息进行编译: 使用调试信息编译着色器,并指示编译器将调试元数据存储在单独的着色器调试信息文件(着色器 PDB 文件)中。在检查 GPU 崩溃转储时,使着色器二进制文件和着色器调试信息文件都可供 Nsight Graphics 访问。将着色器二进制文件的磁盘位置添加到 着色器二进制文件 搜索路径,并将着色器调试信息文件的磁盘位置添加到 单独的着色器调试信息 搜索路径。
示例命令行可能如下所示:
dxc -Zi [..] -Fo shader.bin -Fd debugInfo\ shader.hlsl
如果应用程序动态编译着色器,则需要以类似的方式将着色器二进制 Blob 存储到磁盘,以便在检查 GPU 崩溃转储时它们可以被 Nsight Graphics 访问。
注意
由旧版 Microsoft DirectX fxc.exe 着色器编译器生成的 DX 字节码着色器不支持 IL 级别或源级别的着色器映射。
对于 Vulkan,Aftermath 支持生成带有调试信息的 SPIR-V 着色器代码的以下变体:
使用 Vulkan SDK 着色器编译工具链的 glslangValidator 工具进行编译。示例命令行可能如下所示:
glslangValidator -V -g -o shader.spv shader.vert
使用 Microsoft DirectX Shader Compiler 进行编译。示例命令行可能如下所示:
dxc -spirv -Zi [..] -Fo shader.spv shader.hlsl
运行应用程序时使用完整(即,未剥离)SPIR-V 着色器二进制文件,并在检查 GPU 崩溃转储时通过将存储它们的磁盘位置添加到 着色器二进制文件 搜索路径,使其可供 Nsight Graphics 访问。
注意
剥离和未剥离的 SPIR-V 文件对不支持源级着色器映射。对使用剥离的 SPIR-V 着色器交付的应用程序的着色器源映射感兴趣的用户可以使用 Nsight Aftermath SDK 提供的 GPU 崩溃转储解码功能,并实现他们自己的崩溃转储解码工具。
GPU 崩溃转储
GPU 崩溃转储监视器
GPU 崩溃转储监视器设置
要配置 NVIDIA Nsight Aftermath 监视器设置,请左键单击 Microsoft Windows 系统通知区域(系统托盘)中的 NVIDIA Nsight Aftermath 监视器图标,或右键单击该图标并从弹出菜单中选择 设置 选项。
常规设置
常规设置页面允许配置存储 GPU 崩溃转储的目录、存储 NVIDIA 着色器调试信息文件的目录,以及 NVIDIA Nsight Aftermath 监视器是否应提示在 Nsight Graphics 中打开新崩溃转储。

Aftermath 设置
Aftermath 设置页面允许您配置控制 Nsight Aftermath 图形驱动程序功能的各种选项,并允许您选择将为哪些应用程序捕获 GPU 崩溃转储。
注意
在 Windows 上,修改 Aftermath 图形驱动程序设置需要 Windows 管理员权限。因此,当修改和应用这些设置中的任何一个时,可能会弹出一个用户帐户控制确认窗口,请求修改系统设置的权限。

支持的 Aftermath 模式 如下:
禁用 禁用所有 GPU 崩溃转储创建。
全局 为所有使用 D3D11/D3D12 或 Vulkan API 的应用程序启用崩溃转储创建。
白名单 允许您将 GPU 崩溃转储创建限制为白名单上的特定应用程序集。
生成着色器调试信息 启用着色器调试信息(用于从传递给 NVIDIA 图形驱动程序的着色器 IL 映射到 GPU 执行的着色器微代码的行表)的生成,用于为启用 Aftermath 崩溃转储创建的应用程序加载的所有着色器。
GPU 崩溃转储监视器会将调试信息存储到扩展名为 .nvdbg
的文件中,该文件位于 常规设置选项卡 中配置的 调试信息转储目录 中。
着色器调试信息是必需的,用于将活动或错误着色器 Warp 的着色器微代码指令映射到着色器 IL 或着色器源行。
另请参阅关于 源着色器调试信息 的章节,了解如何使用源级调试信息编译着色器源。
注意
启用此设置将导致额外的编译开销来生成调试信息,以及在着色器编译期间处理调试信息的一般驱动程序开销。
启用资源跟踪 启用驱动程序端跟踪实时和最近销毁的资源(纹理、缓冲区等),用于增强崩溃转储中的 GPU 故障信息。
这允许 Aftermath 识别与 GPU 页面错误导致的崩溃中看到的 GPU 虚拟地址相关的资源。正在跟踪的资源信息包括有关资源大小、格式和资源对象的当前删除状态的详细信息。D3D12 开发人员还可以考虑使用 GFSDK_Aftermath_DX12_RegisterResource
函数来检测他们的应用程序,以注册应用程序创建的 D3D12 资源。这将允许 Aftermath 跟踪其他信息,例如应用程序设置的资源的调试名称。对于 Vulkan 应用程序,通过 vkSetDebugUtilsObjectNameEXT
设置的资源的调试名称也将被捕获。
注意
启用此功能将导致驱动程序产生额外的开销来跟踪资源信息。
启用调用堆栈捕获 启用自动生成 Aftermath 事件标记,用于跟踪应用程序启动的所有绘制调用、计算和光线追踪调度、光线追踪加速结构构建操作或资源复制的来源。此数据可以增强通过 Aftermath 用户标记收集的数据。
自动事件标记在命令流中紧随相应的命令之后添加,并将记录命令的函数的 CPU 调用堆栈作为标记数据有效负载。
注意
启用此功能将导致驱动程序产生相当大的开销,以收集必要的信息。
注意
启用此功能后,GPU 崩溃转储文件可能包含崩溃应用程序的可执行文件的文件路径以及它已加载的所有 DLL 或 DSO 的文件路径。
启用额外的着色器错误报告 使 GPU 进入一种特殊模式,允许 GPU 报告额外的运行时着色器错误。这可能在调试与着色器执行相关的 GPU 挂起、GPU 崩溃或意外行为时提供其他信息。
启用此功能可能会导致额外的崩溃转储报告着色器中出现未定义行为或隐藏错误的问题,这些问题到目前为止一直未被注意到,因为默认情况下硬件会默默地忽略它们。使用此选项启用的其他错误检查将导致以下情况的 GPU 异常:
使用未对齐的地址访问内存,例如读取或写入不是访问大小倍数的字节地址。
访问超出范围的内存,例如读取或写入超出(组)共享或线程局部内存的声明范围,或者从超出范围的常量缓冲区地址读取。
使用不兼容的格式或内存布局访问纹理。
达到调用堆栈限制。
注意
此功能仅在 NVIDIA 图形驱动程序 R515 或更高版本中受支持。
系统设置
系统设置页面包含系统范围的启用 SM 寄存器数据收集设置。在 Linux 上,SM 寄存器的收集始终启用,因此监视器中不会出现系统设置页面。在 Windows 上,SM 寄存器的收集在 R550 及更高版本的驱动程序上始终启用,因此 SM 寄存器收集的控件将被禁用并灰显。
注意
在 Windows 上,修改 Aftermath 系统设置需要 Windows 管理员权限。因此,当修改和应用这些设置中的任何一个时,可能会弹出一个用户帐户控制确认窗口,请求修改系统设置的权限。

启用 SM 寄存器数据收集,以在 SM 内部发生故障时收集 SM 寄存器值。这可以在调试与着色器执行相关的 GPU 崩溃时提供其他信息。
由于这是一个系统设置,修改它也可能影响其他工具,例如 Nsight VSE CUDA 调试器,并可能导致意外行为!在 Linux 上,此功能始终启用,与其他工具没有不兼容性。
注意
此功能仅适用于 NVIDIA 图形驱动程序 R535 或更高版本的 D3D12 和 Vulkan API,并且需要 Nsight Graphics Pro 才能可视化数据。不支持内部着色器的寄存器检查。
命令行设置
所有 Aftermath GPU 崩溃转储监视器设置也可以通过命令行参数进行配置。
可用的命令行标志是:
–help 打印帮助消息,其中包含可用选项的列表。
–version 打印可执行文件的发布版本。
–crashdump-dir arg 设置崩溃转储目录。
–debuginfo-dir arg 设置调试信息转储目录。
–prompt-on-crash 在生成崩溃后提示打开 Nsight Graphics。
–hostname arg 要在其上查找已运行的 Nsight Graphics 实例的计算机的主机名。
所有 Aftermath 设置 和 系统设置 也可以通过崩溃转储监视器可执行文件旁边安装的单独命令行工具进行配置。在 Windows 上,该命令行工具是 nv-aftermath-control.exe。在 Linux 上,该工具名为 nv-aftermath-control.bin。
配置工具支持的命令行标志是:
–mode arg 设置 Nsight Aftermath 模式。arg 支持的选项为:Disabled、Whitelist 或 Global。
–whitelist arg 将应用程序添加到 Nsight Aftermath 白名单。arg 必须采用以下形式:
ApplicationName MyApp ExecutableName myApp.exe
可以重复此选项以将多个应用程序添加到白名单。此选项还会清除先前设置的白名单。
–debuginfo 生成 NVIDIA 着色器调试信息。
–resource-tracking 启用资源跟踪。
–callstacks 启用自动标记生成,并启用调用堆栈捕获。
–shader-error-reporting 启用额外的着色器错误报告。
–register-data-collection 启用 SM 寄存器数据收集。仅限 Windows。
注意
在 Windows 上,修改 Aftermath 图形驱动程序设置需要 Windows 管理员权限。因此,当执行 nv-aftermath-control.exe 时,可能会弹出一个用户帐户控制确认窗口,请求修改系统设置的权限。
新的崩溃转储通知对话框
如果 NVIDIA Nsight Aftermath 监视器配置为在新崩溃转储时提示,则每次将新的 GPU 崩溃转储文件存储到崩溃转储目录时,都会弹出一个通知对话框,指示有新的 GPU 崩溃转储可用。此对话框显示为新崩溃转储生成的名称,还允许您直接在新启动的 Nsight Graphics 实例或已运行的 Nsight Graphics 实例中打开它。

新的崩溃转储通知对话框
如果 NVIDIA Nsight Aftermath 监视器配置为在新崩溃转储时提示,则每次将新的 GPU 崩溃转储文件存储到崩溃转储目录时,都会弹出一个通知对话框,指示有新的 GPU 崩溃转储可用。此对话框显示为新崩溃转储生成的名称,还允许您直接在新启动的 Nsight Graphics 实例或已运行的 Nsight Graphics 实例中打开它。

GPU 崩溃转储检查器
GPU 崩溃转储检查器窗口由两个主要视图组成:
在窗口的左侧部分,有一组选项卡,提供了打开的 GPU 崩溃转储文件的摘要信息,以及有关捕获的崩溃的信息。
在窗口的右侧部分,有一个多用途区域,根据在左侧选项卡某些部分中所做的选择,显示详细信息。

转储信息
转储信息选项卡提供了打开的 GPU 崩溃转储文件的摘要信息以及转储中包含的数据。它由以下部分组成:
转储详情部分总结了关于 GPU 崩溃转储文件的信息,例如文件名、创建转储的日期和时间以及文件大小。
应用程序部分总结了关于为其捕获 GPU 崩溃转储文件的应用程序的信息,例如可执行文件的名称、相应进程的进程标识符以及使用的图形 API。
异常摘要部分总结了关于 GPU 崩溃转储文件中捕获的 GPU 崩溃或 GPU 挂起原因的信息。第一部分包含对转储中检测到的任何页错误或着色器错误的分析。这提供了这些问题的潜在原因,并包含指向任何可用资源信息、着色器位置和相关标记的链接。其他崩溃原因的分析将在未来的更新中添加。第二部分显示了当设备恢复被触发 (TDR) 时,图形适配器和 D3D 或 Vulkan 设备处于何种状态。
系统信息部分总结了关于捕获 GPU 崩溃转储文件的系统的相关信息。这包括关于操作系统、图形驱动程序以及发生崩溃的 GPU 的信息。
崩溃信息
崩溃信息选项卡提供了打开的 GPU 崩溃转储文件中捕获的数据的详细信息。可用的部分将根据崩溃的类型以及捕获到崩溃转储中的信息而有所不同。
活动 Warp 部分(如果可用)显示了崩溃或挂起时所有活动的着色器执行。每一行显示了在特定着色器地址执行的所有 Warp 的摘要,包括 Warp 的数量、着色器的类型、着色器哈希以及着色器内的相应位置(如果着色器调试信息可用)。单击表格中的一行将打开相应的着色器视图。
错误 Warp 部分(如果可用)显示了所有遇到错误的着色器执行。每一行显示了在特定着色器地址上发生的错误命中的摘要,包括错误类型、着色器的类型、着色器哈希以及源着色器内的相应位置(如果着色器调试信息可用)。单击表格中的一行将打开相应的着色器视图。
活动/错误 Warp 部分(如果可用)显示可展开的行,每一行代表在特定着色器地址执行的所有 Warp 的组。如果任何 Warp 遇到错误,则行被标记为错误。 “活动 Warp”列显示在“GPU PC 地址”列中的着色器地址执行的 Warp 数量。可以展开行以显示关于单个 Warp 的详细信息。每个条目显示 Warp 的错误状态、Warp 的唯一标识符、着色器的类型、着色器哈希以及着色器内的源代码或 IL 位置(如果着色器调试信息可用)。单击表格中的一行或“错误”列中的地址链接将打开相应的着色器视图。 Warp 信息根据选择填充,如果 Warp 发生错误,还会显示其他信息,例如错误的名称、其描述以及 Warp 发生错误的着色器地址。单击“GPU PC 地址”或“着色器位置”链接将打开着色器视图。
页错误部分(如果可用)显示了关于导致崩溃的 GPU 页错误的信息。除了无法访问的页的地址外,还有错误的类型、访问的类型以及访问页的 GPU 单元。
页错误资源历史记录部分(如果可用)显示了关于在 GPU 页错误地址处映射或曾经映射的资源的信息(如果启用了 Aftermath 资源跟踪功能)。
资源详情视图显示了关于通过单击上面页错误资源历史记录部分中的资源条目选择的资源的详细信息。该视图显示资源的调试名称、资源的基本 GPU 虚拟地址、资源的大小等。
错误信息部分(如果可用)显示了关于导致崩溃的错误的额外信息。对于某些其他错误类型,此部分会代替“页错误”部分显示。
GPU 状态部分显示了 GPU 各个部分状态的概括性摘要。这有助于跟踪在崩溃情况下图形管线的哪些部分处于活动状态或发生错误。
Aftermath 标记部分(如果可用)显示了每个已注册的 Aftermath 上下文的 GPU 最后处理的 Aftermath 事件标记的摘要。对于用户事件标记,单击表格中的有效负载链接将打开相应的Aftermath 标记数据视图,允许检查用户提供的标记有效负载。对于自动事件标记,单击调用堆栈链接将打开Aftermath 调用堆栈视图,显示将相应的图形命令记录到 D3D 命令列表或 Vulkan 命令缓冲区的函数的调用堆栈。 有关更多详细信息,另请参阅 GFSDK_Aftermath.h 中的事件标记文档。
着色器视图
着色器源视图显示与在活动 Warp、错误 Warp 或活动/错误 Warp 视图中所做的选择相关的着色器代码。 这需要通过配置 GPU 崩溃转储检查器来提供适当的信息。
根据着色器可用的信息,语言选择框提供以下选项:
如果选择源,则视图显示与在活动 Warp、错误 Warp 或活动/错误 Warp 视图中选择的行对应的高级着色器源代码。 如果着色器是从多个源文件编译的,则文件选择框允许在源文件之间切换。 如果选择了“活动 Warp”或“活动/错误 Warp”视图中的一行,则当捕获崩溃转储数据时,所选 Warp 正在执行的着色器源代码行将用黄色箭头标记。 如果该 Warp 发生错误,则红色圆圈将标记错误的位置。 如果选择了“错误 Warp”视图中的一行,则与错误指令对应的着色器源代码行将用红色圆圈标记。 黄色箭头和红色圆圈按钮将直接跳转到相应的标记指令。
如果选择 IL,则视图显示与在活动 Warp、错误 Warp 或活动/错误 Warp 视图中选择的行对应的着色器的中间汇编代码(DXIL 或 SPIR-V)。 如果选择了“活动 Warp”或“活动/错误 Warp”视图中的一行,则当捕获崩溃转储数据时,所选 Warp 正在执行的中间语言语句将用黄色箭头标记。 如果该 Warp 发生错误,则红色圆圈将标记错误的位置。 如果选择了“错误 Warp”视图中的一行,则与错误指令对应的中间语言语句将用红色圆圈标记。 黄色箭头和红色圆圈按钮将直接跳转到相应的标记指令。
Aftermath 标记数据视图
Aftermath 标记数据视图允许检查应用程序提供的 Aftermath 事件标记数据。 由于 Aftermath 事件标记数据是无类型的,因此标记数据视图支持不同的数据视图模式来解释原始数据:
作为字符串将事件标记数据解释为以零结尾的 UTF-8 字符字符串。
作为宽字符串将事件标记数据解释为以零结尾的宽字符字符串。
自定义允许检查原始事件标记字节数据,或使用结构化内存配置提供数据的自定义解释。
Aftermath 标记调用堆栈视图
Aftermath 标记调用堆栈视图显示 GPU 处理的最后一次绘制、调度或复制调用的调用堆栈。 将调用堆栈解析到源位置需要在搜索路径设置中正确设置符号搜索路径。 或者,单击未知符号链接允许为特定的调用堆栈元素提供符号文件。
