visual-studio - 使用 nsight 的 "Start CUDA debugging"时忽略断点

标签 visual-studio visual-studio-2013 cuda nsight

使用“本地 Windows 调试器”时,Visual Studio 2013 中的 .cu 文件中的断点可以正常工作。但是,当使用 nsight 的“启动 CUDA 调试”时,断点将被忽略。这怎么可能?在 nsight 的网站上,他们声明:“使用熟悉的 Visual Studio Locals、Watches、Memory 和 Breakpoints 窗口”。所以我想可以使用正常的断点?

编辑:

  • 启用 CUDA 内存检查器:开/关没有区别
  • 生成 GPU 调试信息:否/是 (-G0) 没有区别
  • 启动 CUDA/图形调试:忽略断点

最佳答案

  • “启动 CUDA 调试” 调试设备(内核)代码,即使用 nvcc 编译的内容 -> 一堆预处理 -> cudafe++ -> cicc 工具链路径。
  • “本地 Windows 调试器” 调试主机代码,这是使用 nvcc -> 一堆预处理 -> cl 编译的内容 或只是 cl

您的代码位于哪个文件中并不重要:.cpp.cu.h。唯一重要的是您的代码是否被注释为 __device____global__

从 CUDA 7.5 RC(2015 年 8 月)开始,在 Windows 上您一次只能调试其中一个。在 Linux 和 OSX 上,您可以使用 cuda-gdb 同时调试两者。

另请参阅:NVIDIA CUDA Compiler Driver NVCC

在 Windows 上调试期间可能导致失败的其他事情:

  • 您正在为一个配置/平台对设置属性,但正在运行另一个配置/平台
  • 主机和设备模块的 .pdb 文件出现问题。检查nvccclnvlinklink选项。例如,主机和设备调试信息可以写入同一个文件中,相互覆盖。
  • 积极的优化:内联、优化局部变量等。发布代码几乎不可能对人类进行调试。调试器也可能被愚弄。
  • 存在未定义的行为和/或内存访问违规。他们很容易使调试器崩溃,从而导致意外结果,例如未命中断点。
  • 您忘记检查 CUDA API 或内核调用之一的错误,出现错误,并且 CUDA 上下文已失效,内核将不再运行。但你还不知道这一点。您的主机代码继续运行,并且您期望内核断点命中,但这永远不会发生,因为内核不会被调用。
  • 上述所有错误都可能存在于库中。不要指望库没有错误。
  • 编译器、调试器和驱动程序也存在错误。但您应该首先假设您的代码有问题,如果没有帮助,请进行调查并向供应商提交错误报告。

关于visual-studio - 使用 nsight 的 "Start CUDA debugging"时忽略断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32295834/

相关文章:

javascript - 是否可以在 Visual Studio 中突出显示某些代码行?

c# - LightInject 入门

c++ - Visual Studio OpenCV 错误 C2664

c++ - 如何向编译器指示指针参数已对齐?

.net - CUDA - 维护指向全局内存的指针

random - CUDA CURAND 是否容易受到数据争用的影响?

visual-studio - dotnet CLI 使用什么 nuget 版本/nuget 功能何时进入 dotnet CLI?

c# - VS 2013 SDK : How to keybind hotkey only for Code Window Editor?

visual-studio - Visual Studio 调试卡在 "Attaching to the web server"

c# - 如何使用编码的 UI 测试在按住 shift(或任何其他按钮)的同时记录多次点击?