---
title: CUDA应用运行/调试
description: "编译调试工具支持调试CUDA程序，通过统一的调试界面使用CUDA-GDB调试GPU应用。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/debugging/debugger/DevKit_Debugger_00015.html
sourcePath: /source/zh/kunpengdevps/debugging/debugger/DevKit_Debugger_00015.html
indexId: c39071d5c4fc03152ac6140bc78c5860e646ad3843b6305b9167a411fb69db9069
---
# CUDA应用运行/调试

编译调试工具支持调试CUDA程序，通过统一的调试界面使用CUDA-GDB调试GPU应用。

#### 前提条件

- 已成功登录鲲鹏DevKit。
- 调试前程序已完成编译。
- 在VS Code工具的资源管理器中打开本地源程序所在的文件夹。


#### 调试有配套源码的程序模块

1. 单击左侧树快捷功能区按钮，或单击“开发”选择编译调试下方的“调试”，打开调试页面。
2. 选择“CUDA应用”，配置CUDA应用调试参数，如图1、图2所示，配置完成后，单击“开始调试”。
  图1 CUDA应用（Launch Application）

  图2 CUDA应用（Attach to Process）

**表1 CUDA应用调试参数说明**

| 参数 | 说明 |
| --- | --- |
| 远程服务器配置 | 选择被调试节点服务器IP地址。 配置时可以使用已有服务器或添加目标服务器，单击“添加目标服务器”，跳转到目标服务器管理界面进行操作。 说明： root用户拥有最高权限，为了避免给系统带来不必要的风险，建议使用非root用户进行调试。 |
| Linux用户密码 | 输入被调试节点用户名密码。 |
| 记住密码 | 勾选后可记住当前远程服务器Linux用户密码。 |
| 调试模式 | Launch Application Attach to Process 说明： 选择“Attach to Process”模式，需要输入被调试进程 PID 。 |
| PID | 输入被调试进程PID。 |
| 应用程序 | 输入应用程序所在的绝对路径。 |
| 应用程序源码路径 | 输入应用程序源码的工作目录。 说明： 如果源码文件是一个 软链接 ，在调试过程中将会读取软链接对应文件内容（文件内容为隐私内容）。在调试前请确认源码文件是否为软链接，若源码文件是软链接，请确认是否有必要进行调试。推荐被调试源码文件为普通的文本文件。 在调试过程中，会将源码路径下的所有文件拷贝到调试服务器，请确认源码路径下仅包含与调试相关的源文件。 |
| 应用程序参数（可选） | 输入CUDA应用程序参数。 |


3. 右下角提示进度条信息，检测所输入的信息是否正确，若检测结果是错误的，请根据提示信息进行处理。
  单击“开始调试”，会自动检测被调试节点是否安装了CUDA-GDBSERVER，以及调试服务器是否安装了CUDA-GDB，如果未安装，请参见安装CUDA Toolkit，CUDA-GDB和CUDA-GDBSERVER包含在 CUDA Toolkit 中，安装CUDA Toolkit的过程中，也会同时安装CUDA-GDB和CUDA-GDBSERVER。 若检测到调试服务器安装的GDB不是CUDA-GDB，因此将无法使用完整的CUDA调试功能，建议重新安装CUDA-GDB，请参见安装CUDA Toolkit。 建议被调试服务器和调试服务器架构保持一致。 目前CUDA支持DWARF2、3、4、5版本的调试格式。 在调试过程中，会拉起CUDA-GDBSERVER程序，请在调试前确认CUDA-GDBSERVER应用程序正常，没有被篡改。 若CUDA应用调试启动失败，请参见CUDA应用调试启动失败的解决方法进行处理。

4. 检测过程中，若识别到目标服务器存在多个GPU设备，弹出“选择GPU设备”对话框，在GPU设备下拉列表中选择需要的GPU设备，单击“确定”。若识别到目标服务器只存在一个GPU设备，不会有对话框弹出，将直接打开CUDA节点的调试窗口。
  图3 选择GPU设备

  只支持“Launch Application”模式下进行GPU设备的选择。

5. 必要信息检测成功后，打开CUDA应用的调试窗口，获取到运行和调试区、源码区和调试按钮区三个区域，运行和调试区显示CUDA调试信息。同时VS Code面板中会显示KERNEL THREADS和INFO CUDA信息，可点开对应页面查看，如图4所示。
  图4 调试窗口

6. 在源码区域进行调试时，当前调试的代码行会高亮显示，在代码行号处单击，会打上断点标记，如图5所示。
  图5 开始调试

  可以选择调试栏上的其他调试按钮来进行调试操作，如表2所示。鼠标移动到调试按钮左侧区域，单击鼠标可以移动调试按钮到其他地方。 表2 调试按钮操作描述 图标 操作 操作描述 继续 单击执行到下一个断点 暂停 单击中断正在执行的程序 单步跳过 单击执行到下一行 单步调试 单击步入函数 单步跳出 单击步出函数 重启 单击后重新启动调试 停止 单击后停止调试

7. 单击调试功能区的按钮，将重新启动CUDA应用调试。
  图6 重启调试任务

8. 单击左侧CUDA调试信息区域会显示对应的变量（Locals、Register）、监视、断点和HOST THREADS信息。在调试的过程中可以查看HOST THREADS信息并切换线程；修改Locals和Register值；添加、修改、单个删除、全部删除监视表达式；查看断点、调用堆栈信息；展开调试信息如图7所示。
  图7 展开全部调试信息


#### 调试没有配套源码的程序模块

1. 单击“开始调试”，配置信息检测成功后，打开CUDA应用的调试窗口，获取到运行和调试区、源码区和调试按钮区三个区域，运行和调试区显示CUDA调试信息，如图8所示。
  图8 调试窗口

2. 在中间源码区域，单击调试栏上的按钮，进行编译调试。在执行结束后会在对应源码代码行高亮，如果源码不存在，源码区域会显示对应的汇编指令，如图9所示。
  图9 汇编指令

3. 可以通过调试按钮继续对汇编指令进行调试，以及给汇编指令地址添加断点。在调试过程中如果执行到有源码文件，会打开对应源码进行源码调试，无源码文件继续使用汇编指令调试。
