2. 指定调试器上下文
CUDA 中的程序执行发生在成百上千个线程中同时进行。CUDA 调试器具有 CUDA: Change CUDA debug focus 命令,允许您在当前调试的应用程序中选择感兴趣的块和线程。
Locals 和 Watch 视图,以及“单步进入”功能,都使用感兴趣的块和线程作为其功能的上下文。
2.1. 选择感兴趣的块和线程
- 从 Visual Studio Code 命令面板 运行 CUDA: Change CUDA debug focus 命令,以显示 CUDA 调试焦点输入框。
或者,Visual Studio Code 状态栏显示块和线程索引,并启动 CUDA 调试焦点输入框。
-
在提供的输入框中输入所需的块索引和线程索引。
-
按 Enter 键。
局部变量和监视工具窗口会显示在新选择的线程上下文中评估的变量和表达式。
注意: |
更改 CUDA 调试焦点会影响断点的行为。断点最初是无条件的。当调试器遇到第一个断点时,断点的位置将成为所有调试的焦点。单步执行和断点都设置在焦点线程上。这会在下一次内核启动时重置,返回到无条件断点。 例如,如果当前焦点是 block(0,0,0) thread(5,2,0),那么断点将仅在块和线程索引与当前焦点索引匹配时命中。 |
2.2. 哪个线程具有焦点?
考虑线程如何在 CUDA 调试器中获取焦点。例如,调试器可以在不通知您的情况下将焦点更改为另一个线程。如果焦点线程不在断点处,并且不同的线程命中了数据断点、条件断点或无条件断点,则 CUDA 调试器会更改当前焦点线程。
例如,如果在块 (0,0,0) 和线程 (0,0,0) 中停止,并且断点在块 (1,0,0) 线程 (0,0,0) 中命中,则调试器将切换到新线程。当单步执行时,调试器不会切换焦点线程,因为其他线程被冻结。
3. 操作指南:查看变量
NVIDIA Nsight™ VSCE 支持标准的 Visual Studio Locals 视图,用于检查 CUDA 源代码中局部变量的值,以及 Watch 视图,用于交互式地评估表达式。
Locals 视图和 Watch 视图中的信息仅在以下情况下在 CUDA 调试器中可用:
-
基于 CUDA 的应用程序正在运行,并且
-
应用程序执行在执行 CUDA 源代码时暂停。
3.1. 查看局部变量的值
-
启动调试会话。
-
在 Visual Studio Code 中,打开包含 CUDA 项目的文件夹。
-
定义至少一个断点。
-
按 F5 启动调试。
-
暂停执行或允许应用程序运行到断点,或者在未启用断点的情况下设置断点。
-
-
从运行和调试 选项卡中选择 Locals。
Locals 视图显示当前词法范围内的变量列表、其赋值和类型。
3.2. 计算表达式的值
-
从运行和调试 选项卡中选择 Watch。
-
单击 + 以 Add Expression。
-
键入调试器识别的任何有效表达式。该表达式可以包含在当前执行位置有效的任何变量。
-
按 Enter 键。
CUDA 调试器评估表达式并显示结果。
如果表达式引用了在当前执行位置无效的变量,则表达式值将显示 <Not available>。
如果表达式是变量,您可以在此列中编辑值以更改变量的内容。您无法编辑 const 变量的值。
声明
声明
NVIDIA® Nsight™ 应用程序开发环境(用于异构平台),Visual Studio Code Edition 2024.1 用户指南发送反馈
本指南中的信息以及本指南中引用的 NVIDIA 文档中包含的所有其他信息均“按原样”提供。 NVIDIA 不对产品信息的完整性做出任何明示、暗示、法定或其他方面的保证,并且明确声明不对产品的非侵权性、适销性和针对特定用途的适用性做出任何暗示保证。 尽管客户可能因任何原因遭受任何损失,但 NVIDIA 对本指南中描述产品的客户的累计总责任应根据 NVIDIA 产品销售条款和条件进行限制。
本指南中描述的 NVIDIA 产品不具备容错能力,并非设计、制造或旨在用于与任何系统的设计、建造、维护和/或操作相关的用途,在这些系统中,使用或此类系统的故障可能会导致威胁人类生命安全或严重的身体伤害或财产损失的情况(包括例如,用于任何核能、航空电子、生命支持或其他生命攸关的应用)。 NVIDIA 明确否认对此类高风险用途的任何明示或暗示的适用性保证。 NVIDIA 不对客户或任何第三方承担全部或部分责任,对于因该等高风险用途引起的任何索赔或损害赔偿。
NVIDIA 不保证或声明本指南中描述的产品在未经进一步测试或修改的情况下适用于任何特定用途。 NVIDIA 不一定对每个产品的所有参数进行测试。 客户全权负责确保产品适合并符合客户计划的应用,并为该应用进行必要的测试,以避免应用或产品的默认设置。 客户产品设计中的缺陷可能会影响 NVIDIA 产品的质量和可靠性,并可能导致超出本指南中包含的附加或不同的条件和/或要求。 NVIDIA 不承担与任何默认设置、损坏、成本或问题相关的任何责任,这些问题可能是基于或归因于:(i) 以任何违反本指南的方式使用 NVIDIA 产品,或 (ii) 客户产品设计。
除客户有权将本指南中的信息与产品一起使用外,NVIDIA 在本指南下未授予任何其他明示或暗示的许可。 仅当复制获得 NVIDIA 书面批准、未经修改地复制并附带所有相关的条件、限制和声明时,才允许复制本指南中的信息。
商标
NVIDIA、NVIDIA 徽标以及 cuBLAS、CUDA、CUDA-GDB、CUDA-MEMCHECK、cuDNN、cuFFT、cuSPARSE、DIGITS、DGX、DGX-1、DGX Station、NVIDIA DRIVE、NVIDIA DRIVE AGX、NVIDIA DRIVE Software、NVIDIA DRIVE OS、NVIDIA Developer Zone (又名 "DevZone")、GRID、Jetson、NVIDIA Jetson Nano、NVIDIA Jetson AGX Xavier、NVIDIA Jetson TX2、NVIDIA Jetson TX2i、NVIDIA Jetson TX1、NVIDIA Jetson TK1、Kepler、NGX、NVIDIA GPU Cloud、Maxwell、Multimedia API、NCCL、NVIDIA Nsight Compute、NVIDIA Nsight Eclipse Edition、NVIDIA Nsight Graphics、NVIDIA Nsight Integration、NVIDIA Nsight Systems、NVIDIA Nsight Visual Studio Edition、NVIDIA Nsight Visual Studio Code Edition、NVLink、nvprof、Pascal、NVIDIA SDK Manager、Tegra、TensorRT、Tesla、Visual Profiler、VisionWorks 和 Volta 是 NVIDIA Corporation 在美国和其他国家/地区的商标和/或注册商标。 其他公司和产品名称可能是与其相关的各自公司的商标。