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

前  言关于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 调试环境搭建
确保已搭建好nxp i.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.1 list命令
用于列出源码,简写:l。
图 15
4.2 break命令
用于设置断点,简写:b。
图 16
4.3 info breakpoints命令
用于显示断点的状态,简写:info b。
图 17
4.4 continue命令
用于恢复程序执行,简写:c。此命令使gdb恢复程序的执行,直至断点触发或程序结束。
图 18
以上调试过程在第二个断点中,每输入一次c命令,将会依次打印arr数组的元素值,然后程序执行结束。同时,串口调试终端打印相关信息。
图 19
4.5 print命令
用于打印变量或者变量地址,简写:p。
图 20
以上调试过程在每处断点中,使用print命令打印变量i的值。同时,串口调试终端打印相关信息。
图 21
4.6 quit命令
退出gdb模式,简写:q。当程序调试完成后,使用quit命令退出gdb调试。
图 22
同时,串口调试终端打印相关信息。
图 23

郭明錤:苹果头戴式AR设备最快今年量产 或与iPhone整合
基于AM3352MCU的智能电网解决方案开发
理解和解决工业机器人设计挑战
机器视觉基本概念学习笔记9
三星T5移动固态硬盘评测 体积小巧轻薄方便携带
ARM平台如何玩转GDB远程调试?
前端滤波器的制作分析
海信和东芝在日本彩电市场持续逞强,市场占有率达26.5%
电动摩擦色牢度测试仪的种类以及用途的介绍
工信部新能源汽车产品监督检查:共有25家企业存在生产一致性问题
电力需求响应是指什么
TVS在微机中的应用实例
5月份豪华车的销量同比增长26.6%,购买豪华车的门槛明显降低
京东方与博尔诚举行战略合作签约仪式
激光焊接温度反馈系统(激光焊接控制系统)
国星光电Mini LED背光的两种技术详解
SMSC发表JB2.2平台 具备多项增强音讯串流特性
浅谈小间距LED显示屏受欢迎的原因
什么是pcb打样 pcb打样原理介绍
多功能屏幕或成为教育领域选购新热点