vscode remote 第三方库_VS Code与GDB Server远程调试

220635489fb6ebd828adcb1bc685d01f.png

背景:

在开发ARM嵌入式端C/C++程序时,一般会在PC上编写代码,在Linux服务器上编译,然后将程序复制或挂载到ARM开发板上运行。如果程序出了问题,在不使用gdb的情况下,经常在代码中添加打印,编译,然后在开发板上再次运行,查看结果。添加打印、编译麻烦费时不谈,想要监视局部变量、断点执行这种方式还不支持。而使用gdb工具时,习惯了使用UI界面的人来说,基本上很难适应。这里将使用VS Code,结合gdb与gdbserver,可视化远程调试arm开发板上的linux C/C++程序。

由于写这篇文件的时候,手上并没有arm开发板,这里就直接使用windows桌面端PC作为替代,其基本实现过程是一致的,只需要在编译gdb时更改编译工具链即可。

实验环境:windows桌面端,Linux服务器,VS Code(使用了Remote-SSH插件)

实验目标:在Linux服务器上编译gdb工具,编译windows可执行程序,然后在Linux平台调试Windows程序。

正文:

编译GDB源码

在进行远程调试linux C/C++程序时,需要在远程端运行gdbserver,在本地端运行gdb,两者进行通信完成调试过程。大多数情况下,ARM开发板的编译工具链是定制化的,很难在网上下载到能够直接使用的配套gdb与gdbserver工具,因此需要手动编译源码得到对应的工具。

到Index of /gnu/gdb页面下载gdb源码包,这里推荐下载7.12.1版本包gdb-7.12.1.tar.xz(写下这篇文章是2020年11月,gdb已更新到10.1版本了,但是经过日常使用测试时发现8.x版本经常崩溃,9.x与10.x版本未测试)。下载完成后,将gdb-7.12.1.tar.xz上传到服务器上(挂载、scp、ftp等各种方式自选),并解压。

tar -xf gdb-7.12.1.tar.xz

到gdb-7.12.1目录下,新建build文件夹,配置、编译gdb程序。

cd gdb-7.12.1
mkdir build

" --host=x86_64-linux-gnu"指gdb要运行的平台为x86_64架构的linux系统,"--target=i686-w64-mingw32"指gdb要调试的程序运行在x86_64架构的windows平台。编译时,请根据实际情况修改要使用的编译工具链前缀,例如编译64位arm平台linux程序,可以使用使用工具链aarch64-linux-gnu。

编译完成后,build/gdb目录下会生成gdb程序。

编译GDB Server源码

gdb server源码存放在gdb-7.12.1/gdb/gdbserver目录下,到此目录下,新建build文件夹,配置、编译gdbserver程序。

cd ../gdb/gdbserver
mkdir build

运行完上面命令之后,不要关键使用make命令编译。因为目标运行平台可能没有安装对应的库支持,导致运行gdbserver时找不到对应的动态链接库。因此打开生成的Makefile文件,搜索"CFLAGS"(大概在136行),在编译选项CFLAGS、CXXFLAGS、CPPFLAGS中添加"-static"字段,优先链接静态库。

48b55cd873a3c2c07b370988e824e400.png
修改Makefile优先链接静态库

然后执行make命令,完成gdbserver的编译工作。

make

编译要调试的程序

使用交叉编译工具链编译要调试的程序,需要注意的是去掉编译选项中的"-O2"或"-O1"选项(某些代码被优化了之后,断点无法生效),并加上"-g"选项,在生成的可执行程序中包含调试信息。

这里编写了一个简单程序,依次打印数字,以便调试。执行make命令直接编译。

4499c2fdf5fe3bd097ca859a16f985bb.png

开始调试

将编译好的gdbserver.exe与生成的被调试程序test.exe复制到Windows PC中,打开cmd终端,运行下面的命令,启动gdbserver。":14399"是指gdbserver监听的端口号是14399(可以配置成其它端口号),用于与gdb通信,冒号":"不可省略,"test.exe"是要被调试的程序。如果程序带有运行参数,直接依次写在test.exe后面。

./gdbserver.exe :14399 test.exe

在打开测试程序源代码工程的VS code窗口中,新建一个launch.json配置。如果已经有了launch.json配置,则直接打开,添加gdb调试配置。

35cbf31065db2df6f13bbb00f9e188ab.png

c6ea22a210c4eea16e37147f37dcd074.png

在launch.json中修改program字段,填写生成的test.exe文件路径。添加"miDebuggerPath"字段,填写刚刚编译生成的gdb路径。添加"miDebuggerServerAddress"字段,填写Windows PC的IP与gdbserver监听的端口号。

9dae3bba5fb86f6094a62e925ac43a7b.png

在文件中打上断点,监视窗口中添加想要监视的变量值,点击运行按钮,即可开始调试过程。

6abc8af95981318933d54ff15b08e129.png
调试效果图
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值