嵌入式Linux--GDB+VSCode调试

1. 引言

本文章主要讲解GDB是什么、有什么用、如何搭配vscode进行使用。GDB(GNU Debugger)是Linux下最常用的命令行调试工具,主要用于C/C++程序开发,它允许你在程序运行时设置断点、单步执行代码、查看和修改内存变量等。一般而言,由于嵌入式中芯片性能较弱,因此一般在PC主机中运行gdb工具,可执行文件和gdbserver放到开发板中运行,通过网络与PC端的gdb进行通信。其中,gdb在PC端上运行,gdbserver需要移植到开发板运行。

注意:前提板端要可上网(以太网/无线网卡等),已使能ssh服务,否则无法使用。

2. GDB移植

此处移植指的是将交叉编译器自带的gdbserver移植到板子的/usr/bin目录下,先找到自己所安装的交叉编译器的目录,gdb与gdbserver所在位置如下图所示:

将上图中的**gdbserver以及你编译出来的可执行文件(可执行文件拷贝到你想要的路径)**通过xftp或者是其他的SCP工具拷贝到板子上即可。移植好之后下边开始介绍如何用vscode+gdb进行图形化调试,因为主机上的gdb工具是基于命令行的,调试不方便,加上IDE可以达到类似Keil的调试效果。

注意,在进行交叉编译时需要加上调试选项才能使用GDB调试,比如笔者用的cmake搭建编译环境,我需要在cmake编译时加入调试选项,如下图所示:

cpp 复制代码
/*需要添加-DCMAKE_BUILD_TYPE=Debug*/ 
cmake -DCMAKE_BUILD_TYPE=Debug \
       -DCMAKE_TOOLCHAIN_FILE=../cross_compile/toolchain-imx6ull.cmake\
        /*省略*/

3. 调试步骤

3.1 vscode设置

前提是在PC主机(Linux系统,如ubuntu等)已安装vscode,打开vscode后,安装插件--Remote Development,安装好之后点击菜单栏的运行--选择添加配置,如下图所示:

此时菜单栏会弹出选择环境的下拉框,点击C++(GDB/LLDB),如下图:

点击后,会在你当前的项目工作目录的.vscode文件夹下生成一个launch.json文件,下边需要对该文件进行添加内容/或者是编辑内容,如下图所示:

需要根据个人实际情况配置的有三个地方:首先是**program,此处需要将后边的/build/vision_gui替换成你自己编译出来的可执行文件所在路径(由于我是cmake编译,所以添加build目录来保存编译产物);其次是miDebuggerPath:此处要替换成你ubuntu主机的gdb工具所在路径;最后是miDebuggerServerAddress:代表的是gdbserver所在的ip地址,也就是你板子的ip地址,后边的:2345是监听端口,自己随意命名一个端口号即可,比如2001,不一定是2345。**到此处vscode的设置就结束了。

3.2 启动板端gdbserver

开发板上 输入下述命令,一定要注意先进入你的可执行文件所在目录,比如我的可执行文件所在目录为/opt/platform/bin:

bash 复制代码
# 注意此处的ip根据你个人的主机ip来设置
gdbserver 192.168.1.6:2345 vision_gui 

需要注意的是,192.168.1.6是笔者个人的ubuntu主机IP,读者在配置时需要更改成自己的主机IP才行,监听端口也要保持一致。此时PC端主机与板端就建立好了网络通信了。

3.3 开始调试

点击vscode上的菜单栏,点击运行--启动调试,如下图所示:

由于是通过网络进行调试的,因此启动调试以后会有一个建立连接的过程,耐心等待一下,连接过程会自动跳出调试控制器,输出信息,如下图:

等待加载完毕,建立连接就完成了。此时vscode会出现下图所示的调试工具栏:

可以看出,一共有6个控制按钮,这6个按钮从左往右功能及快捷键依次如下: 1、继续按钮,快捷键为F5,用于控制程序的运行和暂停,程序运行到断点暂停以后可以 按下此按钮继续运行。 2、单步跳过按钮,快捷键为F10。 3、单步调试按钮,快捷键为F11。 4、单步跳出按钮,快捷键为Shift+F11。 5、重启按钮,快捷键为Ctrl+Shift+F5。 6、停止按钮,快捷键为Shift+F5。此时就可以开始控制程序运行了。

3.4 添加断点

仅需要在想要添加断点的代码行前面鼠标左键点击,就可以出现一个小红点,表示断点已添加,如下图所示:

一般步骤是,先添加断点,然后再启动3.3小节的调试,等待程序执行到断点处停止(从||形状变成|》三角形形状),就可以继续单步执行了。

3.5 监视变量

有时候需要监视一个变量的值,这个也很简单,鼠标右键选中需要监视的变量名上,然后点击鼠标左键,选择"添加到监视",如下图所示:

接下来就会出现如下图所示的调试界面,在左侧栏就可以看到变量的值变化:

4. 总结

以上就是利用vscode进行gdb图形化调试的讲解,在博主的工作中而言,对于嵌入式Linux,百分之90采用的是打印日志调试,剩下百分之10使用gdb调试,建议大家两种调试方法都要会。本次分享就到这里,后边笔者的嵌入式Linux项目预计7月初会上线,有需要的粉丝朋友可以联系笔者。