VsCode + gdb + gdbserver远程调试arm嵌入式linux C/C++程序

基本流程跟我的另一篇文章《VsCode + gdb + gdbserver远程调试C++程序》一样,不一样的是需要重新编译gdb和交叉编译gdbserver。

一、准备工作

sudo apt install libgmp-dev
   
   

如果不安装,编译gdb时可能会报错:configure: error: GMP is missing or unusable

由于我的嵌入式交叉编译工具链在/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/platform/buildroot/output/rockchip_rk3568_itc/host/bin下。

所以设置环境变量:


   
   
  1. su
  2. vim /etc/bash.bashrc

在最后一行添加:

export PATH=$PATH:/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/platform/buildroot/output/rockchip_rk3568_itc/host/bin
   
   

执行命令使环境变量生效:

source /etc/bash.bashrc
   
   

执行上述命令成功后如果执行:

echo $PATH
   
   

控制台输出有刚刚配置的编译链路径,则表明环境变量设置成功了。

继续执行命令:

aarch64-buildroot-linux-gnu-gcc -v
   
   

正常会显示当前安装版本编号

二、下载编译gdb

Index of /gnu/gdb 下载最新的gdb源码。比如:gdb-12.1.tar.gz。


   
   
  1. tar -xzvf gdb-12.1.tar.gz
  2. cd gdb-12.1
  3. ./configure --target=aarch64-buildroot-linux-gnu --prefix=/home/lwf/workplace3/lib/gdb/gdb-12.1/install
  4. make
  5. make install

注意这里因为我的编译工具链是aarch64-buildroot-linux-gnu,所以configure的时候加的target选项是--target=aarch64-buildroot-linux-gnu。如果你的工具链是其它则configure的时候要同步修改。

完成后可以看到在/home/lwf/workplace3/lib/gdb/gdb-12.1/install目录下生成了可执行文件aarch64-buildroot-linux-gnu-gdb。注意等下远程调试的时候这个gdb是运行在我们虚拟机(本机)的linux上的。我们先把这个aarch64-buildroot-linux-gnu-gdb备份到别的目录。

二、编译gdbserver

首先得交叉编译gmp。到官网https://gmplib.org/index 下载最新的gmp源码

执行命令:


   
   
  1. apt-get install lzip
  2. lzip -k -d gmp-6.2.1.tar.lz
  3. tar xvf gmp-6.2.1.tar
  4. cd gmp-6.2.1
  5. mkdir install
  6. ./configure --host=aarch64-buildroot-linux-gnu --prefix=/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install
  7. make
  8. make install

执行完后会在/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install生成gmp的库和头文件

删掉gdb源码目录,重新解压、configure、make


   
   
  1. rm -r gdb-12.1
  2. tar -xzvf gdb-12.1.tar.gz
  3. cd gdb-12.1
  4. mkdir install
  5. ./configure --host=aarch64-buildroot-linux-gnu --prefix=/home/lwf/workplace3/lib/gdb/gdb-12.1/install CFLAGS= "-I/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install/include -L/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install/lib" CXXFLAGS= "-I/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install/include -L/home/lwf/workplace3/lib/gmp/gmp-6.2.1/install/lib"
  6. make
  7. make install

完成后可以看到/home/lwf/workplace3/lib/gdb/gdb-12.1/install/bin下生成了gdbserver 

三、远程调试

将gdbserver拷贝到嵌入式板子上,执行

gdbserver 172.16.25.235:2000 ./App
   
   

其中App为要调试的程序的路径

vscode根据 《VsCode + gdb + gdbserver远程调试C++程序》里面的那样配置。然后修改.vscode/launch.json


   
   
  1. {
  2. // 使用 IntelliSense 了解相关属性。
  3. // 悬停以查看现有属性的描述。
  4. // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  5. "version": "0.2.0",
  6. "configurations": [
  7. {
  8. "name": "g++ - 生成和调试活动文件",
  9. "type": "cppdbg",
  10. "request": "launch",
  11. "program": "/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/app/app/App",
  12. "stopAtEntry": false,
  13. "cwd": "/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/app/app",
  14. "environment": [],
  15. "externalConsole": false,
  16. "MIMode": "gdb",
  17. "setupCommands": [
  18. {
  19. "description": "Enable pretty-printing for gdb",
  20. "text": "-enable-pretty-printing",
  21. "ignoreFailures": true
  22. }
  23. ],
  24. "preLaunchTask": "C/C++: g++ 生成活动文件",
  25. "miDebuggerPath": "/home/lwf/workplace2/RXBOX-04475/RXBOX-04475/app/app/Tool/aarch64-buildroot-linux-gnu-gdb",
  26. "miDebuggerServerAddress": "172.16.53.157:2000",
  27. }
  28. ]
  29. }

其中"program"是要被调试的程序在vmware中的路径

"cmd"是要被调试的程序在vmware中的目录

"miDebuggerPath" 是我们刚刚编译出来的aarch64-buildroot-linux-gnu-gdb在vmware中的路径

"miDebuggerServerAddress"对应我们刚刚在板子上执行的gdbserver指令

配置好后,vscode点击F5,即可实现远程调试

值得注意的是:要被调试的可执行文件一定得带调试信息。用file命令可以看到其是否携带调试信息:

 

如果没有,确保使用gcc/g++编译的时候有加"-g"选项。并且不要加"--only-keep-debug"和" --strip-debug"选项

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值