当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联

The breakpoint will not currently be hit. No executable code of the debugger's target code type is associated with this file

本文关键字:代码 类型 可执行 目标 关联 文件 调试器 中断 断点      更新时间:2023-10-16

调试一个cuda内核时遇到问题。然而,内核函数中的断点永远不会被触及。我试着删除这个项目并使用CMake重新生成,但它仍然不起作用。核心代码如下:

__global__ void testKernel(int val)
{
printf("[%d, %d]:ttValue is:%dn", 
blockIdx.y*gridDim.x + blockIdx.x, 
threadIdx.z*blockDim.x*blockDim.y + threadIdx.y*blockDim.x + threadIdx.x, 
val);
}

我认为这个问题与核心代码无关,而是与这个项目的配置有关。因为这个内核可以在CUDA Samples项目中进行调试。

我使用Debug->Windows->Modules,发现我的目标.lib未加载。当我选择CUDA Thread时,Break Mode显示:

您的应用程序已进入中断状态,但当前没有所选调试引擎支持的代码在执行(例如,只有一个本地运行时代码在执行)。

这是因为使用nvcc编译器编译.cu文件时缺少-g。CMakelists.txt中的原始CUDA_NVCC_FLAGS为:

SET(CUDA_NVCC_FLAGS${CUDA_NVC_FLAGS};-gencode arch=compute_75,code=sm_75;)

修正后:

SET(CUDA_NVCC_FLAGS${CUDA_NVC_FLAGS};-g;-g;-gencode arch=compute_75,code=sm_75;)

现在,我们可以使用Nsight来调试内核函数。