0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARM平台如何玩转GDB远程调试?

Tronlong创龙科技 2021-09-28 18:17 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前 言

关于GDB工具

GDB工具是GNU项目调试器,基于命令行使用。和其他的调试器一样,可使用GDB工具单步运行程序、单步执行、跳入/跳出函数、设置断点、查看变量等等,它是UNIX/LINUX操作系统下强大的程序调试工具。GDB支持多种语言,包括Ada、汇编、C/C++、D、Fortran、GO、Objective-C、OpenCL、Modula-2、Pascal和Rust。

GDB具有一种“远程”模式,此种模式多半是在为嵌入式系统进行调试时使用,远程操作指的是:GDB在一部机器内运行,而要进行调试的程序是在另一部机器上运行,支持TCP/IP协议传输的各种网络,在TCP/IP网络及协议上再加搭传输GDB专有的调试操作通信协议,如此便能进行远程调试。

创龙科技已基于IMX8、ZYNQ、AM5728、AM5708、AM437x、AM335x、T3/A40i等平台提供了GDB程序调试方法说明。本文档主要演示基于TLIMX8-EVM评估板的GDB程序调试方法说明。如需其他平台相关资料,请与我们联系。

开发环境

Windows开发环境:Windows 7 64bit、Windows 10 64bit

虚拟机:VMware15.1.0

Linux开发环境:Ubuntu18.04.4 64bit

U-Boot:U-Boot-2020.04

Kernel:Linux-5.4.70

Linux SDK:5.4.70_2.3.0


硬件平台

TLIMX8-EVM评估板(NXP i.MX 8M Mini)

TLIMX8-EVM评估板


1调试环境搭建

确保已搭建好NXPi.MX 8M Mini SDK开发环境。若未完成搭建,请先参照产品资料用户手册目录下的Linux开发环境搭建手册,完成SDK开发包的安装和配置。

然后进入SDK安装目录,并执行如下命令加载SDK环境变量。

Host# cd /home/tronlong/SDK/

Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux

图 1

如环境搭建正常,执行如下命令可查看交叉编译工具版本。

Host# aarch64-poky-linux-gcc -v

图 2

2演示程序创建与编译

执行如下命令,新建一个GDB调试演示程序。

Host# mkdir test

Host# cd test/

Host# gedit test.c

图 3

在tese.c文件中输入如下代码。

#include

void show() {

printf("show\n");

}

int main(int argc, char *argv[])

{

int arr[4] = {1, 2, 3, 4};

int i = 0;

for (i = 0; i < 4; i++) {

printf("arr[%d]: %d\n", i, arr[i]);

}

}

点击Save,保存退出。


图 4

执行如下命令,修改test文件夹的权限。

Host# cd ..

Host# sudo chmod -R 777 test/


图 5

执行如下命令加载SDK环境变量,并进行程序编译。

备注:编译时需添加-g参数,编译过程中的警告可忽略。

编译完成后,将在test文件夹目录下生成可执行文件test。

Host# cd test/

Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux

Host# $CC -O0 -g test.c -o test

图 6

评估板与PC机连接至同一个路由器后进行上电,执行如下命令通过网络传输的形式,将编译后的可执行文件test拷贝至评估板。

Target# ifconfig //查看评估板的IP地址

图 7

Host# scp test root@192.168.0.17:/home/root //将可执行文件拷贝至评估板“/home/root/”目录下,密码为空即可

图 8

Target# ls -l //查看评估板接收的可执行文件

图 9

3调试程序运行

执行如下命令,确认虚拟机的IP地址。

Host# ifconfig

图 10

在评估板文件系统test文件所在路径下,执行如下命令运行gdbserver程序,开启监听。

备注:192.168.0.83为虚拟机的IP地址;1234为连接的端口号(自行设置);test为将要进行调试的程序。如为Qt界面程序,则需在后面增加-qws参数。

Target# gdbserver 192.168.0.83:1234 test

图 11

在PC机test文件所在路径下,执行如下命令加载SDK环境变量,并运行GDB调试程序。

Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux

Host# aarch64-poky-linux-gdb test //aarch64-poky-linux-gdb为SDK交叉编译环境下的GDB交叉编译工具链,test为将要进行调试的程序

图 12

执行如下命令,连接评估板。192.168.0.17为评估板的IP地址,请以实际情况为准。

(gdb) target remote 192.168.0.17:1234

图 13

同时,串口调试终端显示连接成功的相关信息。

图 14

4程序调试

本章节主要演示GDB调试的几个常用命令的使用方法。

4.1list命令

用于列出源码,简写:l。

图 15

4.2break命令

用于设置断点,简写:b。

图 16

4.3info breakpoints命令

用于显示断点的状态,简写:infob。

图 17

4.4continue命令

用于恢复程序执行,简写:c。此命令使GDB恢复程序的执行,直至断点触发或程序结束。

图 18

以上调试过程在第二个断点中,每输入一次c命令,将会依次打印arr数组的元素值,然后程序执行结束。同时,串口调试终端打印相关信息。

图 19

4.5print命令

用于打印变量或者变量地址,简写:p。

图 20

以上调试过程在每处断点中,使用print命令打印变量i的值。同时,串口调试终端打印相关信息。

图 21

4.6quit命令

退出GDB模式,简写:q。当程序调试完成后,使用quit命令退出GDB调试。

图 22

同时,串口调试终端打印相关信息。

图 23

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM处理器
    +关注

    关注

    6

    文章

    361

    浏览量

    43129
  • 嵌入式开发
    +关注

    关注

    18

    文章

    1103

    浏览量

    49850
  • gdb
    gdb
    +关注

    关注

    0

    文章

    61

    浏览量

    13816
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ElfBoard技术贴|如何在【RK3588】ELF 2开发板进行GDB调试

    GDB(GNU Project Debugger)是在Linux环境下功能全面的调试工具。它提供了一系列强大的调试功能,包括设置断点、单步执行、打印与观察变量、查看寄存器及堆栈信息等。在Linux软件开发的实践中,
    的头像 发表于 11-11 13:47 4925次阅读
    ElfBoard技术贴|如何在【RK3588】ELF 2开发板进行<b class='flag-5'>GDB</b><b class='flag-5'>调试</b>

    蜂鸟的GDB调试时无法在断点处停止是什么原因?

    各位大佬们,我们使用GDB调试程序的时候,在main函数打上断点,然后在gdb中continue,程序并没有在main函数入口处停下?请问大佬知道原因吗?谢谢~
    发表于 11-07 06:15

    CAN总线远程调试工具介绍

    一种工程机械领域调试上的创新产品,可用于Codesys 源程序的无线下载联机、远程调试、故障诊断、CAN 总线数据在线监控、透传收发、数据采集、数据分析、远程控制等各种 CAN 总线通
    发表于 10-17 16:14 0次下载

    【干货分享】RT-Trace国产调试工具 | 技术集结

    专为嵌入式开发者打造的一款高性能、多功能的调试工具。它集成了实时系统跟踪、数据监控、GDB远程调试、Flash程序烧录、虚拟终端等多种功能于一体,支持通过WebU
    的头像 发表于 09-16 08:07 579次阅读
    【干货分享】RT-Trace国产<b class='flag-5'>调试</b>工具 | 技术集结

    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—GDB程序调试方法说明

    (Linux) GDB工具是GNU项目调试器,基于命令行使用。和其他的调试器一样,可使用GDB工具单步运行程序、单步执行、跳入/跳出函数、设置断点、查看变量等等,它是UNIX/LINU
    的头像 发表于 08-05 15:33 343次阅读
    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—<b class='flag-5'>GDB</b>程序<b class='flag-5'>调试</b>方法说明

    设备远程调试新利器:御控网关开启PLC高效运维新时代

    御控网关,专为设备远程调试,尤其是PLC(可编程逻辑控制器)的远程调试服务,凭借其卓越性能与广泛兼容性,支持绝大部分PLC远程
    的头像 发表于 06-24 17:22 405次阅读

    通过御控APP实现PLC远程调试远程监控

    御控APP,通过移动化、智能化的手段,实现了PLC远程调试与监控,为工业生产带来了便捷与高效。
    的头像 发表于 06-04 09:49 437次阅读

    PLC远程调试指南:如何实现PLC远程上下载、控制与跨国运维

    在工业4.0时代,御控网关已为30000+企业提供远程调试服务。搜索访问【御控工业云平台】官网,获取《试用样机》及跨国设备调试方案,让您的设备运维效率猛增!
    的头像 发表于 05-21 09:12 753次阅读

    Arm助力开发者加速迁移至Arm架构云平台 Arm云迁移资源分享

    随着基于 Arm 架构的云实例日益扩展,越来越多的用户正从传统平台迁移至 Arm 平台上。
    的头像 发表于 04-09 18:23 1028次阅读

    STM32CubeIDE无法启动正常调试是哪里出了问题?

    ,采用读取 Show Command Line 后,在terminal窗口中执行,并选择连接到远程GDB服务器后,能够执行数据下载,但勾选自动启动本地GDB服务器仍然出错。
    发表于 03-14 16:30

    为什么会报错Could not determine GDB version using command: arm-none-eabi-gdb --version?

    我已经重启电脑了,没用; 重装软件没有,没有; 将ST_link_server卸载重装也没有; 将arm-none-eabi-gdb加入windows 11系统环境变量,也没用; 将软件的GDB
    发表于 03-12 08:08

    解锁工业新效能:网关助力 PLC 远程调试

    设置,不仅耗费大量时间和人力成本,而且在紧急故障处理时,因地域限制可能导致生产长时间停滞,给企业带来巨大损失。然而,随着科技的不断进步,一种高效便捷的远程调试解决方案应运而生 —— 网关实现远程
    的头像 发表于 03-05 10:34 561次阅读
    解锁工业新效能:网关助力 PLC <b class='flag-5'>远程</b><b class='flag-5'>调试</b>

    设备远程维护如何实现?远程维护平台的功能特点

    随着工业智能化和数字化转型的快速推进,设备远程维护已成为企业提升运营效率、降低维护成本的重要手段。通过远程维护平台,企业能够实时监控设备状态,快速响应故障,实现设备的高效管理和维护。本文将详细探讨
    的头像 发表于 02-21 15:50 1135次阅读
    设备<b class='flag-5'>远程</b>维护如何实现?<b class='flag-5'>远程</b>维护<b class='flag-5'>平台</b>的功能特点

    Cadence Verisium Debug:统一调试平台,加速SoC设计

    Cadence的统一调试平台Verisium Debug,为从IP到SoC级别的复杂设计提供了全面的调试解决方案。该平台集成了多种调试功能,
    的头像 发表于 02-17 11:10 1263次阅读

    [迅为RK3568开发板]非科班也能玩转Android应用,体验QT跨平台能力

    [迅为RK3568开发板]非科班也能玩转Android应用,体验QT跨平台能力
    的头像 发表于 12-18 16:41 1369次阅读
    [迅为RK3568开发板]非科班也能<b class='flag-5'>玩转</b>Android应用,体验QT跨<b class='flag-5'>平台</b>能力