Nsight visual studio 断点调试

2024-06-17 16:18

本文主要是介绍Nsight visual studio 断点调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

记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

 

这篇关于Nsight visual studio 断点调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069934

相关文章

Python MCPInspector调试思路详解

《PythonMCPInspector调试思路详解》:本文主要介绍PythonMCPInspector调试思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录python-MCPInspector调试1-核心知识点2-思路整理1-核心思路2-核心代码3-参考网址

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依