linux开发工具之gdb

时间:2022-07-24 09:13:29

嵌入式开发工具之调试器gdb

gdb是GNU发布的一款功能非常强大的程序调试工具。
GDB主要完成下面三个方面的功能:

  1. 启动调试程序
  2. 让被调试的程序在指定的位置停住
  3. 当程序被停止时,可以检查程序状态-变量值

要在程序中启用gdb,必须先添加调试信息,就是下面这个指令:

gcc -g hello.c -o hello//-g选项的作用是在可执行文件中加入源文件信息,但并不是将源文件嵌入可执行文件,所以在调试时必须保证gdb必须能找到源文件
gdb hello//进入调试器中调试程序

在gdb中一些简单的调试命令

(gdb)run //运行程序

(gdb)list //查看当前运行的程序

以下命令对list的扩展学习
一个具体的例子演示:

tst.c源码

#include <stdio.h>
int sum(int n)
{
int sum = 0;
for(i = 0; i < n; i++)
{
sum += i;
}
return sum;
}

int main()
{
int i;
int a =0;
for(i = 1; i <= 100; i++)
{
a += i;
}
printf("a = %d\n",a);
printf("sum = %d\n",sum(100));
}

1.gdb启动
linux开发工具之gdb
2.l命令
(1)help l或help list
linux开发工具之gdb

linux开发工具之gdb
查看list命令帮助

(2)l(list)列出源码
linux开发工具之gdb
No symbol table is loaded. Use the “file” command.出现这个的原因是:源文件在编译时,没有使用 -g 参数,重新编译使用list命令。
linux开发工具之gdb

linux开发工具之gdb
l命令一次只能列10行

l命令到代码末后继续l
linux开发工具之gdb

(3)继续l或空格键
linux开发工具之gdb
或使用空格键
linux开发工具之gdb
表示上一个l命令后,列出后面的代码可以继续l命令或者直接敲回车键。

(4)l 数字命令
linux开发工具之gdb
表示查看11周围10行代码,即6-15行。l 1可从头查看源码。

(5)l -命令
linux开发工具之gdb
表示查看上一个l命令查看的代码之前的10行,即1-5行。

(6)l 数字,数字
linux开发工具之gdb
表示查看6-20行的源码

(7)l 函数名
linux开发工具之gdb
表示查看main函数周围10行代码。

(8)l 文件名:数字
linux开发工具之gdb
表示查看tst.c文件第6行周围的10行代码

(9)l 文件名:函数名
linux开发工具之gdb
表示查看tst.c文件中main周围10行代码

**1、如何打断点和删除断点**
(gdb) break (行号)/(函数名)/带if的条件语句
eg:
(gdb)break 11//在11行停止
(gdb) break funcl1//函数调用前停止
(gdb) break 21 if i=15 //在21行有for(i =0 ; i <= 100; i++)在i =15停止

(gdb)delete (断点编号)
//如何查看断点编号
(gdb)info break//查看所有的断点信息

2、单步执行

(gdb)next 
(gdb)step
【区别】next在断点之后单步执行,遇到子函数调用,无法进入子函数内部单步执行,而step可以。

3、如何查看断点处当前的变量值

(gdb)print <变量名>

4、在断点之后如何继续运行程序

(gdb)continue //直接将程序运行结束
(gdb)finish //结束当前所在函数的运行

个人的一些学习感悟:
在学习gdb的过程中,深刻的感受到gdb功能的强大,一些命令的学习需要我们慢慢的学习,可能一下无法了解太多,但在今后的学习中,不管是学习gdb,还是其他的,一定要掌握好的学习方法,不管是现在在学校的学习还是将来在工作中,养成一个好的学习习惯非常重要,能够使我们终身受益。