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

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

一、简述

        记--使用过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

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: gdbgdbserver远程调试技术的意义在于提供了一种方便有效的方式来调试运行在远程目标设备上的程序。这对于嵌入式系统或远程服务器等分布式系统的开发和调试非常有用。 首先,gdbgdbserver远程调试技术允许开发人员在不在本地环境下的目标设备上进行调试。这意味着开发人员可以通过网络连接到远程设备,并使用本地的gdb客户端来远程控制和调试目标设备上的程序。这样,不再需要将全部的代码和调试环境放在开发人员的本地机器上,大大节省了开发人员的时间和资源。 其次,远程调试技术提供了实时调试的能力。开发人员可以监控目标设备上的程序执行过程,并在运行时观察程序的状态和变量的值。这对于发现和解决运行时错误和异常非常重要。通过远程调试,开发人员可以更直接地了解程序在实际环境下的行为,从而更有效地修复问题。 此外,远程调试技术还提供了一个更加安全且可靠的调试方法。使用gdbgdbserver进行远程调试,可以避免将敏感的代码或数据复制到本地环境中,减少了潜在的安全风险。同时,由于远程调试是通过网络进行的,即使目标设备处于远程位置,也能够进行调试,减少了物理上接触设备的需求,提高了效率。 总而言之,gdbgdbserver远程调试技术的意义在于提供了一种方便、实时、安全的方法来远程控制和调试目标设备上的程序,使开发人员能够更有效地进行嵌入式系统和分布式系统的开发和调试工作。 ### 回答2: gdb gdbserver远程调试技术是一种用于在线调试嵌入式系统的工具。它的意义在于提供了一种便捷和高效的方式来调试远程的嵌入式设备。 首先,gdb gdbserver远程调试技术可以节省时间和资源。在传统的调试方式中,如果想要调试远程的嵌入式设备,通常需要将设备连接到开发服务器并使用串口进行调试。这种方式不仅繁琐,还占用了宝贵的硬件资源。而gdb gdbserver远程调试技术可以直接在目标设备上运行gdbserver,并通过网络连接到开发服务器上的gdb,使得调试变得更加方便快捷。 其次,gdb gdbserver远程调试技术可以提高团队协作效率。在实际的嵌入式系统项目中,通常会有多个开发人员同时开展工作。使用gdb gdbserver远程调试技术,不同的开发人员可以同时连接到同一个目标设备上进行调试,而不会相互干扰。这样可以提高团队成员之间的协作效率,加快问题解决和软件开发的速度。 此外,gdb gdbserver远程调试技术还提供了更灵活的调试方式。通过gdb gdbserver的支持,开发人员可以在目标设备上进行远程程序调试,包括断点设置、变量查看、程序运行控制等。这种方式可以更加直观地观察到程序的实际执行情况,帮助开发人员更好地理解和解决问题。 总之,gdb gdbserver远程调试技术的意义在于提供了一种便捷、高效和灵活的嵌入式系统调试方式,节省了时间和资源,提高了团队协作效率,同时也方便开发人员更好地理解和解决问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值