【问题标题】:Neglected breakpoints when using nsight's "Start CUDA debugging"使用 nsight 的“开始 CUDA 调试”时忽略的断点
【发布时间】:2015-11-24 13:52:41
【问题描述】:

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

编辑:

  • Enable CUDA Memory Checker:开/关没有区别
  • Generate GPU Debug Information: 否/是 (-G0) 没有区别
  • Start CUDA/Graphics debugging: 断点被忽略

【问题讨论】:

  • stackoverflow.com/q/10827995/681865 是否有帮助(即,您是为调试而构建的吗?)
  • @talonmies idd。测试了所有这些答案,但它们根本没有任何区别。

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


【解决方案1】:
  • “开始 CUDA 调试” 调试设备(内核)代码,即使用 nvcc -> bunch of preprocessing -> cudafe++ -> cicc 工具链路径编译的东西。
  • “本地 Windows 调试器” 调试主机代码,这是使用 nvcc -> bunch of preprocessing -> 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 上下文已死,内核将不再运行。但你还不知道这一点。您的主机代码继续运行,并且您希望内核断点命中,但它永远不会发生,因为内核不会被调用。
  • 上述所有错误都可能在库中。不要期望库没有错误。
  • 编译器、调试器和驱动程序也有错误。但是您应该始终首先假设您的代码有问题,如果没有任何帮助,请调查并向供应商提交错误报告。

【讨论】:

    猜你喜欢
    • 2012-06-05
    • 1970-01-01
    • 2013-04-21
    • 2014-04-03
    • 2013-01-09
    • 2016-12-31
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多