vscode+gdbserver远程调试ARM环境搭建
一、编译gdbserver
1. 下载gdb
http://ftp.gnu.org/gnu/gdb/
2.解压缩
tar xf gdb-8.0.tar.xz
3. 交叉编译
cd gdb/gdbserver/ ./configure --host=arm-none-linux-gnueabihf --target=arm-none-linux-gnueabihf --program-prefix=arm-none-linux-gnueabihf- --prefix=/home/xman/gdb-8.0/binsvr make make install
将/home/xman/gdb-8.0/binsvr/gdbserver 拷贝到ARM开发板/bin
【错误及解决】
(1)linux-ptrace 编译错误:
In file included from ../../gdb/nat/linux-ptrace.c:20:
../../gdb/nat/linux-ptrace.h:180:22: 错误:expected identifier before numeric constant 180 | # define TRAP_HWBKPT 4
解决: gdb/nat/linux-ptrace.c 删除 #include "gdb_wait.h" #include "gdb_ptrace.h"
gdb/nat/linux-ptrace.h 中在 #include "nat/gdb_ptrace.h" 下增加 #include "gdb_wait.h"
参见 https://github.com/foss-for-synopsys-dwc-arc-processors/binutils-gdb/commit/e6600bbefd667810744fbe8eed3830bf5644c354
(2)makeinfo: not found
解决:sudo apt-get install texinfo
二、vscode配置
1. 安装插件:
vscode ssh连接到交叉编译环境主机(如VMware中ubuntu),安装c/c++插件
2. 配置launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name":"(gdb)launch",
"type":"cppdbg",
"request": "launch",
"program": "/home/xman/demo/test_main",
"args": [],
"stopAtEntry": false,
"miDebuggerPath": "/usr/.../bin/arm-none-linux-gnueabihf-gdb",
"miDebuggerServerAddress": "192.168.0.45:8889",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"cwd": "${workspaceFolder}",
"setupCommands": [
{
"description": "sysroot",
"text": "set sysroot target:/"
},
{
"description": "prettyprint",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "follow-fork-mode_child",
"text": "set follow-fork-mode child"
}
]
}
]
}
|
三、开始调试
1. ARM开发板上启动gdbserver,调试守护进程pid(如32101, 可执行文件为 test_main)
# gdbserver :8889 --attach 32101
2. gdb客户端(PC 命令行)
$ arm-none-linux-gnueabihf-gdb test_main ……(省略命令输出) (gdb) target remote 192.168.0.45:8889 (gdb) set sysroot target:/ (gdb) set follow-fork-mode child (gdb) b x_function (gdb) c
【问题与解决】
(1) PC上运行arm-none-linux-gnueabihf-gdb时报错:
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to [:<exec_prefix>])
ImportError: No module named site
原因:可能没有安装 arm-none-linux-gnueabihf-gdb 依赖的 python版本
解决:readelf -d arm-none-linux-gnueabihf-gdb 查看gdb依赖的python库版本,如依赖2.7
安装python2.7: sudo apt-get install python2.7
sudo apt-get install libpython2.7
(2)安装python2.7后 undefined symbol: PyUnicodeUCS4_FromEncodedObject
原因: 在PATH某个交叉工具链路径下也包含了libpython2.7.so.1.0但其内没有定义函数PyUnicodeUCS4_FromoEncodedObject
解决:删除该路径下的libpython2.7.so.1.0,使用安装的libpython2.7
3 gdb客户端(vscode)
可以在代码中添加断点,发起gdb调试了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具