一、下载编译器
从ARM官网下载gcc-arm编译器,编译器中自带gdb和gdbserver,可以省去自己编译。
注:gdb是电脑端程序,gdbserver是arm开发板程序
arm官网链接:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
下载arm-gcc版本10.3在开发板上运行提示lib版本错误,所以下载了版本10.2
也可以直接把编译器文件夹下的库复制到开发板上。
如下图链接可以跳转下载旧版本arm-gcc
注:根据自己开发板内核架构下载对应的编译器,推荐下载和编译开发板系统接近的版本
如下是本次下载的arm-gcc
https://developer.arm.com/downloads/-/gnu-a
解压,根据自己压缩包格式自行百度
xz -dk gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf.tar.xz
tar -xvf gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf.tar
把gdbserver复制到开发板目录下
注:可以放/usr/bin目录下或者和程序放一个目录下。
gdbserver位置:直接把解压的文件夹打开搜索。
opt/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc/usr/bin
修改权限(如果可以执行跳过此步)
直接复制到开发板没有执行权限,要修改一下
chmod 777 gdbserver
二、配置VSCode
VSCode安装插件
配置launch.json文件
主要修改下面几个参数:
"program": "可执行文件路劲(电脑端)",
arm-gcc编译生成在电脑上的程序路劲。
"miDebuggerPath": "arm-gdb路劲",
"miDebuggerServerAddress": "arm开发板ip:gdbserver监听端口"
例如开发板执行./gdbserver :1234 test,gdbserver监听端口写1234
"stopAtEntry": false,
false:按F5调试程序直接运行
true:停在main函数入口处
"preLaunchTask": "start debug",此句可以注释掉
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "test",
"type": "cppdbg",
"request": "launch",
"program": "out\\test",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "start debug",
"miDebuggerPath": "/opt/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gdb",
"miDebuggerServerAddress": "192.168.0.167:1234"
}
]
}
三、启动调试
测试代码
#include <stdio.h>
int main()
{
int abc = 0;
for (int i = 0; i < 10; i++)
{
abc++;
printf("%x\n",abc);
}
printf("%x\n",abc);
printf("11111111111111");
printf("11111111111111");
printf("11111111111111");
return 1;
}
编译代码
要加-g
arm-xxx-gcc -g main.c -o out/test
把编译好的test复制到开发板,如下启动开发板程序
./gdbserver :监听端口号 程序
./gdbserver :1234 test
运行后如下显示
按F5启动VSCode调试,点击“仍要调试”
注:"preLaunchTask": "start debug",此句注释掉就没有下面弹窗提示
调试界面
四、arm-gdb运行出错
gdb在电脑端运行报错,没有 libncursesw.so.5
执行ldd arm-xxx-gdb,查看依赖文件
系统缺少 libncursesw.so.5、libtinfo.so.5、libpython2.7.so.10
在文件夹下/usr/lib/x86_64-linux-gnu把新版本6软链接为5
安装libpython2.7
ln -s libncursesw.so.6.3 libncursesw.so.5
ln -s libtinfo.so.6.3 libtinfo.so.5
apt-get install libpython2.7