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

    文章

    360

    浏览量

    41735
  • 嵌入式开发
    +关注

    关注

    18

    文章

    1029

    浏览量

    47569
  • gdb
    gdb
    +关注

    关注

    0

    文章

    60

    浏览量

    13297
收藏 人收藏

    评论

    相关推荐

    PLC远程维护IoT平台是什么

    PLC远程维护IoT平台是物联网(IoT)技术在工业自动化领域的一种重要应用。它是指通过物联网技术,将分布在不同地点的可编程逻辑控制器(PLC)设备连接在一起,实现远程监控、远程编程
    的头像 发表于 11-29 16:41 154次阅读

    天拓四方:PLC远程调试网关简介

    。随着技术的发展,PLC远程调试网关应运而生,成为解决这一问题的关键工具。 一、PLC远程调试网关的工作原理 PLC远程
    的头像 发表于 10-09 14:26 241次阅读

    PLC远程编程调试平台是什么

    、灵活的管理需求。为此,PLC远程编程调试平台应运而生,为工业自动化带来了革命性的变革。 PLC远程编程调试
    的头像 发表于 10-08 14:26 212次阅读
    PLC<b class='flag-5'>远程</b>编程<b class='flag-5'>调试</b><b class='flag-5'>平台</b>是什么

    为什么无法使用esp-gdbstub调试esp8266?

    /应用.输出 (gdb) 设置远程硬件断点限制 1 (gdb) 设置远程硬件观察点限制 1 (gdb) 设置
    发表于 07-11 08:24

    PLC远程维护(远程编程调试远程上下载程序)平台的功能

    。 数之能推出的PLC远程维护平台将分布在全球各地的PLC设备连接在一起,打破了地理空间的限制。通过这个平台,工程师们可以随时随地监控系统状态,进行故障诊断,并实施必要的程序更新或修复,如远程
    的头像 发表于 05-24 16:07 445次阅读
    PLC<b class='flag-5'>远程</b>维护(<b class='flag-5'>远程</b>编程<b class='flag-5'>调试</b>和<b class='flag-5'>远程</b>上下载程序)<b class='flag-5'>平台</b>的功能

    PLC远程调试模块是什么?PLC远程调试模块的功能

    PLC(可编程逻辑控制器)远程调试模块是一种设备或软件功能,它允许工程师或技术人员在远离实际现场的情况下,通过网络对PLC进行编程、监控、故障诊断和参数调整。这对于分布广泛或难以直接接触的工业
    的头像 发表于 05-22 14:53 734次阅读
    PLC<b class='flag-5'>远程</b><b class='flag-5'>调试</b>模块是什么?PLC<b class='flag-5'>远程</b><b class='flag-5'>调试</b>模块的功能

    使用VSCode调试嵌入式程序:如何切换gdb server

    上文小编给大家介绍了一下如何使用VSCode结合cortex-debug插件进行调试的方法。本篇就趁热打铁,进一步深入了解一下如何切换gdb server。让我们可以不仅仅使用JLinkGDBServer进行调试
    的头像 发表于 05-09 11:02 2149次阅读
    使用VSCode<b class='flag-5'>调试</b>嵌入式程序:如何切换<b class='flag-5'>gdb</b> server

    在ELF 1开发环境中使用Qt Creator进行远程调试

    QtCreator是一款跨平台集成开发环境(IDE),主要适用于支持Qt框架的各类应用程序开发。其内置的远程调试机制使得开发者能够在本地开发环境中对部署在远程设备上的代码进行
    的头像 发表于 04-20 11:03 934次阅读
    在ELF 1开发环境中使用Qt Creator进行<b class='flag-5'>远程</b><b class='flag-5'>调试</b>

    为什么VSCODE使用GDB调试不显示寄存器?

    VSCODE使用GDB调试不显示寄存器
    发表于 02-22 06:46

    arm三个寄存器在gdb调试时的作用

    arm三个寄存器在gdb调试时作用  ARM是一种广泛使用的微处理器架构,它广泛应用于移动设备、嵌入式系统和其他高性能计算设备。当我们在使用gdb
    的头像 发表于 01-31 10:44 979次阅读

    如何使用linux下gdb调试python程序

    如何使用linux下gdb调试python程序  在Linux下,可以使用GDB(GNU调试器)来调试Python程序。
    的头像 发表于 01-31 10:41 2612次阅读

    linux用gdb调试遇到函数调用怎么办?

    linux用gdb调试遇到函数调用怎么办? 在Linux上使用GDB调试时,遇到函数调用是一个常见的情况。函数调用可能涉及到多个函数、多个文件,这就需要我们仔细审查代码,理解函数之间的
    的头像 发表于 01-31 10:33 714次阅读

    简述GDB调试器提供的基本功能

    GDB是一个功能强大的源代码级调试工具,它提供了多种基本功能,帮助程序员** **更好地理解程序的运行机制和定位问题** **。
    的头像 发表于 01-28 17:44 1306次阅读

    TLT507-GDB程序调试方法说明

    TLT507-GDB程序调试方法说明
    的头像 发表于 01-26 10:11 980次阅读
    TLT507-<b class='flag-5'>GDB</b>程序<b class='flag-5'>调试</b>方法说明

    RK3568-GDB程序调试方法说明

    RK3568-GDB程序调试方法说明
    的头像 发表于 01-19 16:16 1845次阅读
    RK3568-<b class='flag-5'>GDB</b>程序<b class='flag-5'>调试</b>方法说明