[attach]3221[/attach]
请问这是怎么回事啊,用F5调试没有问题,用cuda调试弹出这个消息,生成的dll是输出到一个专门的路径下,没有在该工程的debug下,这样就不能用cuda调试么
楼主您好,这个是个常见问题:
您的解决方案有一个dll项目,但是很不幸的,它被设置成了默认项目,则:
(1)如果该dll项目没有被build过,弹出上图这个对话框。
(2)如果该dll项目被成功build过,将弹出另外一种dll不是有效的运行目标的对话框。
解决方案:
如果您的项目只有dll项目,那么很遗憾,无法直接调试。(您可以将kernel单独提出来然后调试)。
如果您的项目有exe项目,请将exe项目设置为默认项目(通过点击您的exe项目,右键选择设置成默认),然后重新在nsight菜单进行调试。
VS可以直接调试dll项目的(例如您将rundll32.exe设置为启动目标),
但是nsight没有办法直接调试dll项目中的kernel.
(也许下个版本的nsight将会提供此功能, 所以您也可以不采取2#的任何建议,而是等到下个nsight版本发布(可能等上个1年即可))
我将exe设为启动项目 ,但还是弹出类似的对话框,这次报的是 exe 文件was not found ,但是exe文件也是生成了的
请在设置exe为默认启动项目后,尝试rebuild all一下,再进行nsight调试。
报的错是 …\debug*.exe was not found. *.exe确实不是在该目录下,而是设置为输出到另一个目录下,是因为它找不到这个路径么
这个有可能。
但是我没有尝试过将项目的输出该成非默认路径,无法知道nsight是否能找到。
建议您尝试修改会默认路径然后尝试下。
或者您右键点击您的exe项目,将nsight属性中的启动选项定位到您的exe的实际位置,再次尝试。
这样可以避免nsight无法自动找到。
这样可以启动cuda调试,但是不在.cu中的断点停
看样子 cuda是调试不了C++动态库的
LZ您好:
1:如果您需要在kernel中或者__device__函数中设置断点并启动调试,请使用nsight启动调试,此时host端代码中的断点是无效的。
2:如果您需要在host端代码中设定断点并调试,请使用VS原先的调试,即直接按F5启动调试,此时kernel和__device__函数中的断点是无效的。
以上是我根据您9#和10#中只言片语的信息猜测您的情况并给出的建议,如与实际情况不符,敬请无视。
祝您好运~
我是在c++ dll中加入 .cu和.cuh文件,右键-》nsight user properties》launch external program 设置exe路径。启动nsight调试,但不在.cu的断点处停,所以在dll中无法调试kernel函数
先不急着下结论,
尝试一下您是否使用了-G编译?(右键点击您的.cu文件,属性中Generate GPU Debugging Information (-G))看看这个是否选上。
如果这个也不行,那么真心无法调试dll,届时下结论也不迟。
这个默认是选中的。还是不行
如果您已经成功完成了上述的:
(1)设置exe为默认启动项目
(2)设置exe项目的nsight属性中的launch program为您的修改后的exe的所在的位置
(3)确定您的dll项目中的.cu文件使用了-G却依然无法调试。
那真心不知道了。
对您这个要求无法提供可用的解决方案表示歉意。
楼主您好,我刚才重复进行了您的实验,调试dll项目按照我上面的步骤是毫无问题的。
nsight按照我说的方法可以成功的在kernel中命中断点的。
(以及,除了这个,我还尝试了一个dll和C#项目混合调试,nsight依然可以调试kernel的)
请再次确保您完成了我要求的全部内容。
以及,除了这3点,请您检查:
(4)您的kernel确实执行过。谢谢。(不要笑。但是很多人根本就没有启动kernel就抱怨nsight无法调试kernel的)。
不好意思,没有来及时回复。
版主说的很对。
是我的代码的问题,没有执行到cuda 函数那里就跳出了。
哎,我下结论太武断了,不好意思。
另外 特别感谢斑竹的耐心支持!
没有关系,您的经验值提升了。
下次您这不就知道了,要调试一个kernel,需要先能执行它。
感谢来访。周末愉快。