VS2013+CUDA无法命中断点

这是一个简单的程序,在GPU上申请长度为5个int型的buffer,其他什么都没有做。

 #include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <iostream>
using namespace std;
int main()
{
    int *dev_buf = 0;
    cudaError_t cudaStatus;
    cudaStatus = cudaSetDevice(0);//选择GPU
    if (cudaStatus != cudaSuccess) 
    {
        cout << "GPU设置错误\n";
        goto Error;
    }
    cudaStatus = cudaMalloc((void**)&dev_buf, 5 * sizeof(int));//申请空间
    cudaStatus = cudaDeviceReset();//结束,GPU重置
    if (cudaStatus != cudaSuccess) 
    {
        cout<<"GPU重置错误";
        return 1;
    }
Error:
    cudaFree(dev_buf);
    return 0;
}

在调试时,出现了很奇怪的现象,在第10行,cudaStatus 已经等于 cudaSuccess,但单步调试还是进入if后面{}内,但只经过了goto这一行,但却没有转跳。继续单步直接越过15行,到了16行。如果直接把断点设置在15行,启动调试时,断点就自动跳到16行了。然而程序的确给dev_buf分配了显存,程序运行正常。反复尝试发现,程序中第一次出现的cudaMalloc()函数无法命中断点,且对前面语句产生影响,如果程序里再出现一个或多个cudaMalloc,一切单步调试正常。以为是代码与程序不一致,网上找了各种设置,均无效。CUDA版本是7.5,新手,请各位大牛指教。万分感激。

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问