![Linux嵌入式系统开发从小白到大牛](https://wfqqreader-1252317822.image.myqcloud.com/cover/667/41398667/b_41398667.jpg)
5.3 gdb调试工具的使用方法
gdb调试工具有什么作用呢?习惯在Windows下开发的读者感觉不到调试工具的存在,比如使用Visual Studio做项目开发,需要调试时,使用快捷键F11就能进入程序的Debug模式。但在Linux系统中由于没有强大的图像调试工具,就需要借助gdb调试工具。gdb是一个纯命令行的调试工具,也是由GUN组织开发和维护的。在讲解gdb调试工具前,需要确保Linux系统已经安装了gdb调试工具,可以使用gdb-v命令来查看,如图5-13所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/106_03.jpg?sign=1739251860-phKLHfe1Wxu12nR1VeK284fgTHpzVtv4-0-d86aa7e21159003ceab80f051834ff61)
图5-13 查看gdb版本信息
这里主要介绍如何在Linux系统下编写一个C语言的程序文件,然后使用gdb调试工具进行调试。需要强调是,使用gdb调试工具的前提是源文件没有语法、语义的错误,即源文件能够通过gcc编译器的编译。因为基本上所有的Debug工具都是用来调试逻辑功能,而不是用来检查代码完整性的。在演示调试过程之前,先需要了解gdb常用的调试命令,详见表5-2。
表5-2 gdb调试工具常用命令
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/107_01.jpg?sign=1739251860-Kd36M2BgFDkBuPwOtPFUNMxoqUqlPoCs-0-26a5d9190f92b9adc57683ab393d304d)
下面就来演示如何将一个源程序文件通过gdb调试工具,完成逻辑功能的调试。首先介绍一下test1.c程序文件的功能。test1.c文件的功能就是在Linux系统终端下比较输入的两个整数的大小,具体的函数实现是先声明一个能够返回最大值的函数Max,然后在主函数中调用它,具体的函数代码如图5-14所示。下面开始演示过程。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/107_02.jpg?sign=1739251860-Qtq5ubKrjNX4lBGdosNpU3EQqZ734d8W-0-2db20cad48b29f7bfa81d5f364b32343)
图5-14 test1.c文件代码
Step 1 由于gcc编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果想要编译后的程序可以被调试,编译的时候要加-g的参数,例如gcc-g-o test1 test1.c,接着使用gdb test1命令就进入gdb的调试模式了,如图5-15所示。
Step 2 具体的调试命令参见表5-2 gdb,下面演示run命令,如图5-16所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_01.jpg?sign=1739251860-FIWoqe52bc4yuzphUQ4T2jxtDa812DBW-0-a62b82c1a26ee0c6e92068eaa7658d74)
图5-15 进入gdb调试模式
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_02.jpg?sign=1739251860-YttUV7JpKjT43anRXJDEQmKNRkirZPXb-0-ef4f768a19b6d434210b51b4cdcc1350)
图5-16 gdb执行run命令
Step 3 设置断点操作,如图5-17所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_03.jpg?sign=1739251860-3FKuyPm5EW62G6earMaMaanbdRWYP21J-0-8f9e7b3b7a30786d63f672e351347b84)
图5-17 gdb执行break命令
Step 4 执行当前语句操作,如图5-18所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_04.jpg?sign=1739251860-7Nanvyoiz0Y3THAl3A5hwRjdHTJLQVje-0-5c82b9278d28d49068f065f171e3a30e)
图5-18 执行step命令
Step 5 设置继续程序的运行操作,如图5-19所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_05.jpg?sign=1739251860-EERy3ypxqGawCqf7BnxhYrEbONdAlVPy-0-4b47295c79c50c31b13e1233c30dd78a)
图5-19 执行continue命令
Step 6 设置变量和查看变量操作,如图5-20所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/109_01.jpg?sign=1739251860-qaMVRTHam7vmax6hcLQ8Hwp8SF5cHHaA-0-e08b845b0e28c7122e81ea731422ee36)
图5-20 执行p/set var命令
Step 7 执行删除断点以及退出gdb调试操作,如图5-21所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/109_02.jpg?sign=1739251860-xjIZ7EHRfWBeJV1EDBdHWU4bmyvaoigC-0-0049cf66ccf29d78ae3d80bc7059745e)
图5-21 执行clear/quit命令
小白成长之路:gdb调试工具的作用
我们为什么要讲解gdb调试工具呢?第一,gdb调试工具能够帮助优化程序的逻辑功能,解决实际问题;第二,通过使用gdb调试工具能够理解Windows平台下IDE软件调试的机理;第三,在编译Linux内核时需要gdb调试工具的帮助。