您当前的位置:首页 > 电子 > 嵌入式系统

嵌入式 程序调试之gdb+gdbserver+vscode可视化调试

时间:03-16来源:作者:点击数:

一、简述

记--使用过visual studio的都知道,它的单步调试真的好用,可以直接在源码下断点,实时查看内存变量、寄存器等相关信息。嵌入式linux开发多用的是gdb, 都是命令行执行的,毕竟嵌入式设备跑的系统都是定制裁剪,不像桌面操作系统那样有UI操作界面,而且嵌入式设备程序还会操作实际硬件,所以想要在PC端模拟仿真可不容易。gdb+gdbserver+vscode使得可视化调试成为可能,

其中调试嵌入式程序:gdb是交叉编译工具链的gdb,如arm-linux-gnueabihf-gdb;gdbserver是跑在嵌入式设备上的,用于启动调试嵌入式程序,但调试指令由远程的gdb来实际发出,配置vscode进行操作gdb,然后gdb操控gdbserver以实现可视化调试。

相关程序打包:外链:https://wwm.lanzouv.com/b0cb5qtla密码:bnws

二、VSCode安装GDB debug插件

下载地址:https://marketplace.visualstudio.com/items?itemName=DamianKoper.gdb-debug

安装插件:(例子中是在ubuntu16.04安装的)

三、配置vscode

配置被调试程序:"program": "${workspaceFolder}/test1"

配置gdb:"miDebuggerPath": "arm-linux-gnueabihf-gdb",

配置gdbserver的IP端口:"miDebuggerServerAddress": "192.168.20.1:12345" (其中192.168.10.1是嵌入式设备的IP)

launch.json文件

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gdb-arm",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/test1",
            "args":[],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "internalConsoleOptions": "neverOpen",
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "arm-linux-gnueabihf-gdb",
            "miDebuggerServerAddress": "192.168.20.1:12345",//remote gdb with gdbserver
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text":"-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
            //"preLaunchTask": "Compile"
        }
    ]
}

四、启动调试

4.1 启动gdbserver

4.2 启动gdb

下断点

启动调试:

五、工作环境搭建

实际工作环境中有两台电脑, 由于保密关系,linux电脑是实际开发电脑,源码所在,外部USB、串口都被禁用了,且跟windows是两个网段(两个主机都不能上外网),但为了跟windows通信,网络管理部门将这两个IP连通了,也就是这两个IP可以通信。

linux电脑IP是:172.16.18.100

windows电脑是:172.16.20.200

但只有windows能连接嵌入式设备,但是由于是嵌入式linux,只能在linux系统进行调试嵌入式程序。解决办法:让windows跟嵌入式设备进行组网,使其能通信(如windows跟嵌入式设备处于同一个局域网,比如windows和嵌入式设备同连接一个热点),然后windows进行端口转发或进行软路由。

本案例中使用端口转发,案例中嵌入式设备有wifi热点,也就是windows连接上嵌入式设备即可组网。

比如嵌入式设备的热点网关是192.168.20.1, windows连接上之后会处于同一个网段。

在嵌入式linux设备执行ifconfig命令即可查看(或在windwos上执行ipconfig即可找到嵌入式设备的网关)

配置端口转发:将windows(172.16.20.200)的12345端口转发给嵌入式设备(192.168.20.1)的12345端口,可以简单理解为172.16.20.200:12345就是192.168.20.1:12345

配置转发
netsh interface portproxy add v4tov4 listenaddress=172.16.20.200 listenport=12345 connectaddress=192.168.20.1 connectport=12345

查看当前转发的配置
netsh interface portproxy show all

删除转发规则
netsh interface portproxy delete v4tov4 listenaddress=172.16.20.200 listenport=12345
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门