引言
GDB调试主要有两种方法:
(1)直接在目标板上通过gdb调试程序
(2)在目标板上通过gdbserver运行程序,在宿主机上通过gdb调试程序
本篇文章主要来说明一下gdbserver远程调试的方法,主要以VScode举例说明:
步骤
一、VScode配置
1)安装VScode软件,可直接去官网下载。
2)安装ssh插件
3)登录远程服务器:ctrl+shift+p调出用于执行命令的输入框,输入remote-ssh:add new ssh host,用于添加新的SSH主机。
4)按照:ssh 用户名@ubuntu 服务器IP 的格式进行添加ssh主机,输入示例:ssh root@192.0.10.10
5)选择第一个会将远程服务器用户名、IP存在config文件中
6)ctrl+shift+p调出用于执行命令的输入框,输入remote-ssh:connect to host,用于连接到SSH主机。
选择平台的远程主机:
输入密码后,选择打开的文件夹即可;
二、远程调试
1)创建launch.json文件,此文件就是用于调试的配置文件。
2)选择调试器后,会自动生成launch.josn文件,在该文件中需要进行修改配置,实例配置如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "sdk-debug",
"type": "cppdbg",
"request": "launch",
"miDebuggerPath": "aarch64-linux-gnu-gcc-gdb",
"miDebuggerServerAddress": "192.0.10.10:1789",
"program": "${workspaceFolder}/.a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"logging": {
"engineLogging": false
},
"MIMode": "gdb",
}
]
}
详见:Debugging in Visual Studio Code
launch.json文件需要修改的地方就是program字段、miDebuggerServerAddress字段,${workspaceFolder}是指刚才打开的远程文件夹,只需要在后面指定待调试程序的名称即可。stopAtEntry字段,默认是false,这是指开始调试的时候是否在main函数断点,所以改为true。其他使用默认的就行。
name:配置名称,将会在调试配置下拉列表中显示。
type:调试器类型。
request:调试方式。
miDebuggerPath:调试器位置。
miDebuggerServerAddress:用于远程调试连接的调试器服务器(设备)
program:要调试的程序(完整路径,支持相对路径)。
args:传递给上面程序的参数,没有参数留空即可。
stopAtEntry:是否停在程序入口点(停在main函数开始)。
cwd:调试程序时的工作目录
environment:要添加的环境变量。
externalConsole:调试时是否显示控制台窗口。
MIMode:VSCode要使用的调试工具。
3)远程设备开启gdbserver
首先在设备端开启:./gdbserver :1789 libsdk(这里的1789要和miDebuggerServerAddress里的1789保持一致)注:gdbserver使用时需要拷贝到设备上。
其次在VScode上:
三、SSH免密登录
1)配置环境变量
右击此电脑->属性->高级系统设置->环境变量->新建->确定
选择用户变量而非系统变量下方的 新建 新建以下环境变量:
输入变量名为:SSH_PATH
变量值:C:\Windows\System32\OpenSSH\
再选择用户变量中的 PATH 编辑,添加以下两个对象:
%SYSTEMROOT%\System32\OpenSSH\
C:\Windows\System32\OpenSSH
2)判断是否安装ssh成功
Win+R cmd
ssh -V 查看版本号,查看到即安装成功。
3)在本地生成密钥对
ssh-keygen 一路回车
4)服务器
在服务器找到home\用户名\.ssh文件夹(没有的话使用命令mkdir .ssh新建);
若有.ssh文件夹,查看其中是否包含名为authorized_keys的文件,若无,使用touch authorized_keys命令创建;
打开上述authorized_keys文件,将本地Windows系统上的id_rsa.pub里面的内容拷贝到authorized_keys中保存即可。
四、注意事项
1)当调试的程序和设备上的程序不一致时,VScode调试控制台会输出以下错误: