打印
[ARM入门]

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

[复制链接]
6326|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 Tronlong创龙 于 2021-9-27 15:13 编辑

#技术资源# #有奖活动# #每日话题# #申请原创#
前  言

关于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 <stdio.h>
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);
    }
}

点击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

IMG_7425.jpg (379.94 KB )

IMG_7425.jpg

61512d08a259f.png (402.74 KB )

61512d08a259f.png

61512d0898034.png (25.2 KB )

61512d0898034.png

61512d08bac15.png (179.58 KB )

61512d08bac15.png

61512d08ac931.png (20.27 KB )

61512d08ac931.png

61512dea0f0c8.png (41.97 KB )

61512dea0f0c8.png

61512df93749c.png (18.56 KB )

61512df93749c.png

61512e05f396e.png (81.95 KB )

61512e05f396e.png

61512e248bc9c.png (50.22 KB )

61512e248bc9c.png

61512e307f176.png (21.87 KB )

61512e307f176.png

61512e40b5042.png (14.09 KB )

61512e40b5042.png

61512e549efba.png (84.3 KB )

61512e549efba.png

61512e60e78b8.png (15.67 KB )

61512e60e78b8.png

61512e738e8b4.png (87 KB )

61512e738e8b4.png

61512e83b400e.png (133.92 KB )

61512e83b400e.png

61512e9adae38.png (16.23 KB )

61512e9adae38.png

61512ea907d4a.png (72.35 KB )

61512ea907d4a.png

61512eba4b39d.png (34.46 KB )

61512eba4b39d.png

61512ecbc7e09.png (38.95 KB )

61512ecbc7e09.png

61512f316e2c7.png (119.1 KB )

61512f316e2c7.png

61512f4003f91.png (21.32 KB )

61512f4003f91.png

61512f4fdbc47.png (137.42 KB )

61512f4fdbc47.png

61512f6147606.png (21.19 KB )

61512f6147606.png

61512f72da0e2.png (54.4 KB )

61512f72da0e2.png

61512f822898a.png (21.15 KB )

61512f822898a.png

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

315

主题

323

帖子

4

粉丝