DPU调试器运行/调试
编译调试工具支持基于鲲鹏平台进行DPU调试,实现DPU XDB(X Debugger)调试能力。XDB是针对DPU的调试工具,提供用户在CPU上通过GDB调试微码程序,查看寄存器、局部变量、Spram、线程变量、调用栈,设置断点、监视等能力。
前提条件
- DPU调试环境(XDB工具)请联系华为技术支持获取;
- 兼容VS Code的最低版本为1.60.0;
- 兼容C/C++插件的最低版本为1.7.0;
- 请使用安装有DPU网卡的服务器;
- 调试前程序已完成编译;
- 调试前远程服务器已安装
GDB ;
操作步骤
- 请准备已编译好的二进制文件(sim.elf),在远程主机上执行XDB二进制,会默认侦听在2048的TCP端口,在XDB上也可以指定不同的cardID和端口号。图1 执行XDB二进制
图2 指定不同的cardID和端口号
- XDB扩展了GDB的能力。
- XDB使用方式和GDB使用方式基本一致,主要区别在于XDB不能控制程序执行,需要用户提前打断点并通过db或者报文方式唤醒微码线程处理,进入微码后在断点处程序停止。然后可以查看寄存器、spram、局部变量等调试信息,也可以单步继续往下执行。
- 目前DPU调试依赖提供的sim.elf二进制文件,如果想要支持所有的调试功能,必须提供一个带“-g”编译选项的sim.elf二进制文件。
- 单击左侧树快捷功能区按钮,或单击“开发”选择编译调试下方的“调试”,打开调试页面,选择“DPU调试器”,配置DPU调试参数。如图1所示。图3 DPU调试器
表1 DPU调试器参数说明 参数
说明
类型
类型可选:
- 通用应用
- HPC并行应用
- CUDA应用
- 安全应用
- DPU调试器
远程服务器配置
进行调试的远程服务器。
端口号(可选)
服务器的端口号,默认为2048。
应用程序
远程服务器上进行调试的应用程序的完全路径。指定为sim.elf二进制。
工作目录(可选)
远程应用程序的工作目录。
- DPU调试器调试参数保存后,配置的参数会自动写入launch.json文件中,其中“postRemoteConnectCommands”参数如下所示:
"postRemoteConnectCommands":[ { "text":"set non-stop" }, { "text":"target retome :2048" } ]
non-stop是GDB支持的一种多线程调试方式,当某一线程停止时,不影响其他线程的继续运行。
目前XDB只支持non-stop模式,而GDB默认是all-stop调试模式。
- 单击“开始调试”,跳转到“运行和调试”窗口,左侧树显示变量、监视、断点和调用堆栈信息,右侧显示源码以及调试按钮。如图4所示。
启动DPU调试器后,会提示出现异常,是因为在DPU上的都是硬件线程,无法自行启动,这时需要启动一个dummy线程来进行打断点操作。
表2 调试按钮操作描述 操作
操作描述
继续
点击执行到下一个断点
暂停
点击中断正在执行的程序
单步跳过
点击执行到下一行
单步调试
点击步入函数
单步跳出
点击步出函数
重启
点击后停止调试
停止
点击后停止调试
鼠标移动到调试按钮左侧区域,点击鼠标可以移动调试按钮到其他地方。
- 单击行号处的红点打上断点,单击执行到当前断点;单击执行到下一行,用户可根据调试需求进行调试。图5 执行调试
- 若需要切换线程进行调试,需要在后端服务器上发送报文信息,发送后会在调用堆栈处增加一个线程,可进行线程切换。图6 发送报文
图7 多线程切换
父主题: 编译调试工具