You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用cuda-gdb调试调用CUDA函数的Python代码?

调试调用CUDA函数的Python代码方法

先说明你当前报错的原因

你用 cuda-gdb python3 hello.py 出现报错,本质是用错了工具的使用方式:

  • cuda-gdb 是用来调试编译后的CUDA二进制程序(比如CUDA C/C++生成的可执行文件、.so库)的,没法直接调试Python脚本这种解释型文件。
  • 你的Python解释器没有编译调试符号,所以会提示No debugging symbols found in python3。
  • 脚本文件本身不是core dump格式,自然会被识别为格式错误。

不同场景的调试方案

场景1:用PyCUDA/CUDA Python这类高层库调用CUDA

如果你的代码是用PyCUDA、NVIDIA官方CUDA Python这类库直接写CUDA逻辑,按下面步骤来:

  1. 先确保Python带调试符号
    要么从源码编译Python时加--with-debug参数,要么装带调试符号的包(比如Debian/Ubuntu下装python3-dbg)。
  2. 用cuda-gdb正确启动Python并加载脚本
    别直接把脚本当参数传给cuda-gdb,正确命令是:
    # 方式1:直接指定运行脚本
    cuda-gdb --args python3 hello.py
    # 方式2:先启动cuda-gdb再运行脚本
    cuda-gdb python3
    # 进入cuda-gdb后执行
    (cuda-gdb) run hello.py
    
  3. 调试CUDA核函数
    要调试GPU上的核函数,编译核函数时必须加调试参数:
    • 比如PyCUDA中编译核函数要加-G和-g:
      from pycuda.compiler import SourceModule
      mod = SourceModule("""
          __global__ void my_cuda_kernel() {
              // 你的核函数代码
          }
      """, options=["-G", "-g"])
      
    • 然后在cuda-gdb里给核函数设断点:
      (cuda-gdb) break my_cuda_kernel
      (cuda-gdb) run hello.py
      
    程序跑到核函数时会暂停,这时就能用step、print这些cuda-gdb命令调试GPU代码了。

场景2:调用自己编译的CUDA扩展库

如果你的Python代码调用的是自己写的CUDA C/C++扩展(比如用setuptools编译的.so文件),调试步骤:

  1. 编译扩展时加调试信息
    在setup.py里给nvcc和C++编译器加调试参数,以PyTorch扩展为例:
    from setuptools import setup
    from torch.utils.cpp_extension import CUDAExtension, BuildExtension
    
    setup(
        name='my_cuda_ext',
        ext_modules=[
            CUDAExtension('my_cuda_ext',
                sources=['ext_main.cpp', 'cuda_kernel.cu'],
                extra_compile_args={'cxx': ['-g'], 'nvcc': ['-G', '-g']})
        ],
        cmdclass={'build_ext': BuildExtension}
    )
    
  2. 用cuda-gdb启动调试
    同样用cuda-gdb --args python3 hello.py启动,然后给扩展里的CUDA函数设断点:
    (cuda-gdb) break my_cuda_kernel  # 替换成你的核函数名
    (cuda-gdb) run
    
    触发核函数调用后就可以调试GPU代码了。

实用调试小技巧

  • 用info cuda threads查看当前GPU线程的状态信息。
  • 查看GPU变量时,可以指定线程上下文,比如print threadIdx.x查看当前线程的x索引。
  • 如果同时要调试Python代码逻辑,可以在Python代码里插import pdb; pdb.set_trace(),当程序停在pdb断点时,切换到cuda-gdb窗口设置GPU断点,再继续运行。

内容的提问来源于stack exchange,提问作者thanksarose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:22:07