gdb vscode 不进入断点_VS Code远程调试Linux C指南

1. 开始之前

长期使用printf、syslog打印的方法在Linux ARM平台下调试C程序,小编深切感受调试效率不高,有时还会忽略删除打印调试的代码,程序需要编译多次向目标机传输,甚至有的问题还不容易定位。为解决调试程序的痛点,引用gdb远程调试方法,它可查看变量值、设置断点等功能,使用起来非常方便。

或许有人会提出疑问,使用gdb需要记很多的命令,一段时间不使用会生疏。说实话,小编也不喜欢记很多命令行,接下来介绍的调试方法是不需要记住任何gdb命令,就是使用VS Code远程调试。

调试前需先对gdb做ARM平台的交叉编译,若已完成交叉编译,可跳过进入下一章节。

1.1 下载gdb文件

推荐在官网下载最新的发布版本,可通过FTP、http、git等方式下载,链接:http://www.gnu.org/software/gdb/download/

小编使用的版本是gdb-8.3.1.tar.xz。

接下来需分别做交叉编译生成arm-linux-gnueabi-gdb和gdbserver可执行文件,编译时间比较长,需耐心等待。

1.2 arm-linux-gnueabi-gdb交叉编译

tar -xvf gdb-8.3.1.tar.xz
cd gdb-8.3.1
./configure --target=arm-linux-gnueabi --prefix=/tmp/gdb
make
make install

在/tmp/gdb目录下能看到编译好的arm-linux-gnueabi-gdb等可执行文件,拷贝arm-linux-gnueabi-gdb拷贝到/usr/bin目录下,此目录已设环境变量。

--target=指定目标机交叉编译器的前缀,表示目标平台是运行在ARM体系结构的Linux内核。

--host=表示目标主机,将运行的平台(在1.3中会用到)。

--prefix=表示编译生成的可执行文件所在目录。

1.3 gdbserver交叉编译

tar -xvf gdb-8.3.1.tar.xz
cd gdb-8.3.1
./configure --host=arm-linux-gnueabi --target=arm-linux-gnueabi --prefix=/tmp/gdbserver
make
make install

和上1步的gdb交叉编译方法类似,在/tmp/gdbserver目录生成编译好的在目标机运行的gdb、gdbserver等可执行文件。

2. 远程调试

2.1 业务流程图

56989da661dd8a44e9251f6d4385501f.png
图2-1 VS Code远程gdb调试业务流程图

2.2 安装VS Code

VS Code是微软向开发者提供的一款真正意义上的跨平台编辑器,能运行在Windows、Mac OS、Linux系统上,支持多种开发语言,如C、C++、Python等,具有非常丰富的插件,界面简洁友好。安装非常简单,推荐在官网上下载最新发布版本,下载链接。

2.3 安装插件

打开VS Code软件,在插件搜索框分别输入SSH、C/C++,根据关键词自动匹配搜索内容,依次选择安装“Remote-SSH”和“C/C++”这两个插件,如下图所示。

95902ad7e064f5e5b214e7031e05e032.png
图2-2 SSH插件界面

9db20b7a1b495584bc334289a0f44209.png
图2-3 C/C++插件界面

2.4 配置文件

2.4.1 SSH配置

在SSH主界面点击“configure”按钮,选择配置文件输入主机名、用户名及端口号。右击配置的SSH账号可创建连接。

2.4.2 任务配置

点击菜单栏“终端”,在弹出的下拉框选中“配置任务”,主界面出现tasks.json配置文件,如下图所示。

330d990bbaaa38cef887780aeacd5c95.png
图2-4 运行任务配置界面

“lable”:任务名称。

“command”: 执行的命令,可将多条命令用“;”分开按照先后顺序执行。

按“ctrl + shift +B”组合快捷键执行运行任务,此快捷键可能会和输入法冲突,使用之前先切换输入法为英文。

2.4.3 gdb配置

点击gdb配置按钮弹出“launch.json”配置文件,仅需对红框里的参数修改。

“program”:表示可执行文件的目录;

“miDebuggerPath”:表示arm-linux-gnueabi-gdb的路径;

“miDebuggerServerAddress”:表示连接目标机gdbserver的网络参数。

840160849175ec3951a8adbea8911c28.png
图2-5 gdb配置界面

2.5 启动gdbserver

编译一个App的可执行文件,如名称app,编译时应带有“-O0 -g”选项参数,将可执行文件di拷贝到目标机下,如/project/app。

将交叉编译的gdbserver拷贝到目标机下,如/project/gdbserver,使用gdbserver启动调试的可执行程序app,执行命令如下。

root@admin:/mnt# ./gdbserver 127.0.0.1:12345 ./app
Process ./di created; pid = 29764
Listening on port 12345

2.6 启动调试

在VS Code菜单栏的“调试(D)”选项选中启动调试,或按下快捷键F5,连接成功的界面如下,可单步运行、设置断点等,和IAR开发软件调试类似,使用起来非常方便。

3ae7e2d5fa7438b0a5afcdce261c7821.png
图2-6 gdb调试界面

目标机运行的gdbserver会打印客户端连接信息。

root@admin:/mnt# ./gdbserver 127.0.0.1:12345 ./app
Process ./di created; pid = 29764
Listening on port 12345
Remote debugging from host 192.168.9.155, port 46004
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值