前  言

本指导文档适用开发环境:

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

Linux开发环境:Ubuntu 18.04.4 64bit

虚拟机:VMware15.1.0

U-Boot:U-Boot-2020.04

Kernel:Linux-5.4.70

Linux SDK:5.4.70_2.3.0

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专有的调试操作通信协议,如此便能进行远程调试。

本案例采用的评估版为创龙科技TLIMX6U-EVM,它是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的评估板,由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。

评估板接口资源丰富,引出双路网口、双路RS485、双路CAN、三路USB、多路DI/DO、LCD等接口,板载WIFI、Bluetooth模块,支持LoRa、NB-IoT、Zigbee、4G模块,可选配外壳直接应用于工业现场,方便用户快速进行产品方案评估与技术预研。

正面外观:

 

1 演示程序创建与编译

在Ubuntu工作目录下执行如下命令,新建一个GDB调试演示程序。

Host#    mkdir test

Host#    cd test/

Host#    vi test.c

 

 
图 1

#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[i]);

}

show();

return 0;

}

执行如下命令,使能Linux SDK环境变量,进行程序编译,编译完成将会生成test可执行程序。

备注:编译时需添加-g参数,生成的可执行文件才带有调试信息。

Host#    source /home/tronlong/SDK/environment-setup-cortexa7t2hf-neon-poky-linux-gnueabi

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

 
图 2

评估板与PC机连接至同一个路由器后进行上电,将编译后的可执行文件test拷贝至评估板文件系统任意目录下。

Target#        ls

 
图 3

2 调试程序运行

执行如下命令,查看虚拟机的IP地址。

Host#    ifconfig

 
图 4
 

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

备注:192.168.0.143为虚拟机的IP地址;1234为连接的端口号(自行设置);test为将要进行调试的程序。

Target#        gdbserver 192.168.0.143:1234 test

 
图 5

在虚拟机test文件所在路径下,执行如下命令使能Linux SDK环境变量并运行GDB调试程序。

Host#    source /home/tronlong/SDK/environment-setup-cortexa7t2hf-neon-poky-linux-gnueabi

Host#    arm-poky-linux-gnueabi-gdbtest

 
图 6

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

(gdb)     target remote 192.168.1.251:1234

 
图 7

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

 
图 8

3 程序调试

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

3.1    list命令

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

 
图 9

3.2    break命令

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

分别在main函数和第10行设置断点。

 
图 10

3.3    info breakpoints命令

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

 
图 11

3.4    continue命令

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

 
图 12

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

 
图 13

3.5    print命令

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

设置断点后,可依次打印当前变量i的值。

 

 
图 14
 
 
图 15

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

 
图 16

3.6    quit命令

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

 
图 17
 

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

 
图 18
如果你还想了解更多嵌入式应用的相关知识,欢迎关注Tronlong创龙科技~

嵌入式知识分享——GDB程序调试方法说明的更多相关文章

  1. 嵌入式linux应用程序调试方法

    嵌入式linux应用程序调试方法 四 内存工具 五 C/C++代码覆盖.性能profiling工具 四 内存工具 您肯定不想陷入类似在几千次调用之后发生分配溢出这样的情形. 许多小组花了许许多多时间来 ...

  2. 【matlab】MATLAB程序调试方法和过程

    3.8  MATLAB程序的调试和优化 在MATLAB的程序调试过程中,不仅要求程序能够满足设计者的设计需求,而且还要求程序调试能够优化程序的性能,这样使得程序调试有时比程序设计更为复杂.MATLAB ...

  3. 交叉编译问题记录-嵌入式环境下 GDB 的使用方法

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10693247.html 本文以嵌入式 Linux 环境下的 gdb 使用为例,记录交叉编 ...

  4. GDB 程序调试简单实践

    用了好久的GCC/G++ 却一直都没用过GDB调试过程序,有时程序不是非常大,一般有错,直接看编译器编译结果就几乎相同知道错在哪儿了,或者使用codeblocks单步调试,甚至回到windows以下调 ...

  5. 1、GDB程序调试

    GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具.一般来说GDB主要完成下面四个部分的功能. 1)启动你的程序,可以按照你的自定义的要求运行程序. 2)可让被调试程序在你所指定的调试的 ...

  6. Linux gcc和gdb程序调试用法 {转}

    gcc一般调试格式: gcc -Wall -o  test   test.c // -wall  显示程序错误详细信息      gcc -v  // 显示gcc的版本 gcc -o{1,2,3} t ...

  7. gdb,程序调试助手

    启动GDB:(其中我的app是编译之后的可执行文件) 退出命令:quit或者简写q 帮助获取: gdb通过完备的在线帮助,使我们使用起来更加方便.所有的帮助信息都是通过help命令获得的,运行help ...

  8. Linux段错误及GDB Coredump调试方法

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation Fa ...

  9. 1-2 编程基础 GDB程序调试

    简介 GDB是GNU发布的一款功能强大的程序调试工具.GDB主要完成下面三个方面的功能: 1.启动被调试程序 2.让被调试的程序在指定的位置停住. 3.当程序被停住时,可以检查程序状态(如变量值). ...

  10. 【转】 GDB 常用调试方法

    一.多线程调试 多线程调试可能是问得最多的.其实,重要就是下面几个命令: info thread 查看当前进程的线程. thread <ID> 切换调试的线程为指定ID的线程. break ...

随机推荐

  1. 从 Rollover+curator 到 ILM

    数据量增长,当前存在的问题: 查询与写入越来越慢,聚合的速度慢的离谱,聚合的数据量大一些的话,可能出现超时失败,甚至OOM 磁盘和内存资源以肉眼可见的速度快速消耗,甚至出现满载的情况 JVM频繁GC, ...

  2. JDBC连接MySQL 8时报错:MySQLNonTransientConnectionException: Public Key Retrieval is not allowed

    需要设置属性 IDEA DBerver

  3. 5GC 关键技术之 CUPS(控制与用户面分离)

    目录 文章目录 目录 前文列表 CUPS(控制与用户面分离) 前文列表 <简述移动通信网络的演进之路> <5G 第五代移动通信网络> <5GC 关键技术之 SBA(基于服 ...

  4. 4G EPS 中的 PLMN 选择

    目录 文章目录 目录 前文列表 PLMN 选择 前文列表 <4G EPS 中的系统消息类型> PLMN 选择 UE 开机后的第一件事情就是完成小区搜索,即完成和 eNB 的牵手.在牵手成功 ...

  5. 有隙可乘 - Android 序列化漏洞分析实战

    作者:vivo 互联网大前端团队 - Ma Lian 本文主要描述了FileProvider,startAnyWhere实现,Parcel不对称漏洞以及这三者结合产生的漏洞利用实战,另外阐述了漏洞利用 ...

  6. IDEA使用——生成超文本格式的(HTML)JavaDoc

    概述 在大型项目中不免会有很多对外暴露的方法与接口,那我们就需要在类或者方法上面按照JavaDoc标准编写注释,就比如这样: 前面我们也提到过在Idea中可以将鼠标停留在方法名上,然后点击F2查看方法 ...

  7. tkinter小例子

    from tkinter import * def on_click(): label['text'] = text.get() root = Tk(className='hello') root.m ...

  8. FFmpeg下载编译、代码结构以及编译系统

    从这里开始,就要踏上学习FFmpeg的旅程了,使用的FFmpeg版本5.0.1 1.ubuntu下,如何下载并编译FFmpeg源码 打开FFmpeg官网 Download FFmpeg,我们可以通过g ...

  9. NumPy 泊松分布模拟与 Seaborn 可视化技巧

    泊松分布 简介 泊松分布是一种离散概率分布,用于描述在给定时间间隔内随机事件发生的次数.它常用于模拟诸如客户到达商店.电话呼叫接入中心等事件. 参数 泊松分布用一个参数来定义: λ:事件发生的平均速率 ...

  10. JS中BOM事件,JS样式特效,表格对象和表单操作

    DOM事件 1.DOM中的事件可以分为两类 1.浏览器行为 如:文档加载完成,图片加载完成 2.用户行为 如:输入框输入数据,点击按钮 (2).常见的DOM事件 onload 浏览器已完成页面的加载 ...