Nsight visual studio 断点调试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011808673/article/details/81672443

记Nsight Debug时总是跳过断点的解决方案

1. 在对工程做了任何修改后,特别是对代码的修改,都应该重新生成解决方案:

生成->重新生成解决方案(Build->Rebuild Solution)

2. 路径中一定一定不能有中文


GPU调试一直是一个很头疼的问题,在kernel比较简单的时候可以选择把一些计算结果打印出来进行查看,但当kernel很复杂的时候就没法这样进行调试了。听说Nsight可以提供帮助,使得GPU可以像CPU一样进行调试。Nsight在window下作为visual studio的插件,在Linux下作为eclipse的插件供我们使用。 
然而博主在使用Nsight时设置断点后,发现调试并不能进入断点。于是百度,谷歌,stack-overflow,官方文档一个一个查过去也能找到对口的解决方案,然后在我不知所措的时候突发奇想试了一种我一直不屑试的情况,然后——知道真相的我眼泪流下来。如果你跟博主是同样的情况,那很幸运的。如果不太一样,在文章的最后面也会列出一些常见的造成跳过断点的可能方式,希望能在有所帮助。 
因而本文解决的问题如标题所示,即:Nsight Debug时所设置的断点总是被跳过怎么破?

编程环境

首先列出博主的编程环境: 
- OS: Win7 
- IDE: Visual Studio 2015 
- CUDA Toolkit Version: 8.0 
- Nsight Version: 5.3

博主的情况

为了避免歧义,博主会讲的比较详细,不要嫌啰嗦哈~ 
首先建立CUDA工程,步骤如下: 
1. 建立一个CUDA工程:文件->新建->工程(File->New->Project)。我把这个Project命名为MyCudaProject。 
Build-MyCudaProject
注意:这个工程我放在了桌面,路径为C:\Users\Administrator\Desktop\,路径是全英文的。因而你的工程路径也一定不能出现中文。 
2. 在解决方案资源管理器(Solution Explorer)中,可以看见一个自动生成的kernel.cu文件,我们在 
__global__ void addKernel函数int i = threadIdx.x;前设置断点。 
BreakPoint 
3. 生成->生成解决方案(Build->Build Solution),等待解决方案的生成。 
Generate-Resolution 
4. Nsight->Start CUDA Debugging 
Nsight-Debugging 
此时是可以停在断点处的。但如果新建一个.cu文件,如main.cu文件,将刚刚kernel.cu的代码拷贝过来,在同样位置打上断点,再将kernel.cu移除(避免多个main入口),再使用Nsight->Start CUDA Debugging启动debug,此时就会出现忽略断点的情况了。

解决方案

与CPU调试不同的是,在GPU调试过程中,对程序任何地方有修改,都应该重新生成解决方案。否则Nsight调试的依旧是之前的代码。 
因而在上文提到的情况下,我们删除了旧的断点,新增了断点却没有重新生成解决方案,当然会跳过断点了。 
因而解决方案就是:生成->重新生成解决方案(Build->Rebuild Solution)。(是不是知道真相的你眼泪也流了下来)

其他可能跳过断点的可能情况

5.Device的 generate GPU Debut Infomation 设置为 YES

6. 路径中避免中文的出现。

  1. 请确保是使用Nsight的debug方式调试,即Nsight->Start CUDA Debugging。
  2. Nsight只能进行GPU调试,即断点只有在是__global__和__device__函数中才能生效。
  3. Visual Studio,CUDA Toolkit和Nsight的版本之间是否匹配。可能是Nsight的版本过低,不能支持较高版本的Visual Studio和CUDA Toolkit。此时你应该先查看一下已安装的Nsight是否支持你所安装的Visual Studio和CUDA Toolkit,如果不支持,就把它进行更新。
  4. 是否使用-G编译kernel。在解决方案资源管理器(Solution Explorer)中,右键点击要设置断点的.cu文件,属性->Host->Generate Host Debug Infromation设置为Yes。 
    -g-Compile

参考

[1] https://developer.nvidia-china.com/forum.php?mod=viewthread&tid=7379&extra=&page=1 
[2] http://blog.csdn.net/imcomma/article/details/53007869 
[3] http://developer.nvidia-china.com/forum.php?mod=viewthread&tid=7503&page=3 
[4] https://stackoverflow.com/questions/32295834/neglected-breakpoints-when-using-nsights-start-cuda-debugging

猜你喜欢

转载自blog.csdn.net/u011808673/article/details/81672443
今日推荐