![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=1739286160-vMpk4bkfCo9uSJLC9SLfmThnHRolkwab-0-b044554f2e75d4a7bedd712b4d62e5b9)
图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=1739286160-cYKlv8Dar9lgTEy0IoTExS7bEcwJ7voP-0-70557b4ea48172a6b635e01f7a8488d4)
下面就来演示如何将一个源程序文件通过gdb调试工具,完成逻辑功能的调试。首先介绍一下test1.c程序文件的功能。test1.c文件的功能就是在Linux系统终端下比较输入的两个整数的大小,具体的函数实现是先声明一个能够返回最大值的函数Max,然后在主函数中调用它,具体的函数代码如图5-14所示。下面开始演示过程。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/107_02.jpg?sign=1739286160-o9ql45RIVoZFi4KDuKNfXopChtCt3Mid-0-beffdfca0c1a1532fdaf25415dad6e0a)
图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=1739286160-KqBc6TcDP5vHxQKgbduN5ktCPr3Qu9VY-0-8275de837207279fc42f90822c0e634e)
图5-15 进入gdb调试模式
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_02.jpg?sign=1739286160-0Wcb3cNQs9SUAJhgquFnLWPaTyqr7EQJ-0-33be841732d6adb67b75b3a8f94043c0)
图5-16 gdb执行run命令
Step 3 设置断点操作,如图5-17所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_03.jpg?sign=1739286160-1Yl2jXDKh8fppZamWrVwiW9Xm4QwMTPG-0-24a27ecb1fa0d48f1d223661c2b993c2)
图5-17 gdb执行break命令
Step 4 执行当前语句操作,如图5-18所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_04.jpg?sign=1739286160-feM5qqhTpqk83okscJXut0kaKWGJ6bJh-0-3f9d147eb2a1ea3706e0fdccc7f78d25)
图5-18 执行step命令
Step 5 设置继续程序的运行操作,如图5-19所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/108_05.jpg?sign=1739286160-9b3p2kmW4h2eKgWKh3z9rFXjQZW1PbKz-0-d23a471187d5dc3641fb62b01c95fb4f)
图5-19 执行continue命令
Step 6 设置变量和查看变量操作,如图5-20所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/109_01.jpg?sign=1739286160-OvI0zE6MHtWnTdqJAGpgxqFZ16JT9LDb-0-062d6b407159ec344e7f694e19e61378)
图5-20 执行p/set var命令
Step 7 执行删除断点以及退出gdb调试操作,如图5-21所示。
![](https://epubservercos.yuewen.com/DEDA9F/21570843408785506/epubprivate/OEBPS/Images/109_02.jpg?sign=1739286160-HnxUxFb3Rv2YDK5iD4jKlhnfX04sjd7S-0-c642c33e673db7191e46dd8b83fd9450)
图5-21 执行clear/quit命令
小白成长之路:gdb调试工具的作用
我们为什么要讲解gdb调试工具呢?第一,gdb调试工具能够帮助优化程序的逻辑功能,解决实际问题;第二,通过使用gdb调试工具能够理解Windows平台下IDE软件调试的机理;第三,在编译Linux内核时需要gdb调试工具的帮助。