Linux调试工具GDB使用简易教程

2025-05-27 0 42

本文所述主要是Linux调试工具GDB的使用教程,具体如下。

声明:本博客内容是由本人经过实验楼教程整理得来。

GDB的相关概念

GDB, 是 The GNU Project Debugger 的缩写, 是 Linux 下功能全面的调试工具。GDB 支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。在 Linux 环境软件开发中,GDB 是主要的调试工具,用来调试 C 和 C++ 程序。

GDB的相关操作

下面给出一个具有buging.c的程序:

?

1

2

3

4

5

6

7

8

9

10

11

12
[yqtao@localhost linux]$ cat buging.c

#include <stdio.h>

int getSum(int n) {

int sum=0,i;

for (i=1;i<=n;i++)

sum+=i;

return sum;

}

int main(){

int res=getSum(100);

printf("1+2+...+100=%d\\n",res);

}

如果要调试程序,则在进行gcc编译的时候要加上-g参数

gcc -g -o bugging bugging.c

进入gdb:

gdb buging

部分gdb命令:

Linux调试工具GDB使用简易教程

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38
// 查看源码

// 查看第几行附近

// 可简写成l 2

(gdb) list 2

1 #include <stdio.h>

2 int getSum(int n) {

3 int sum=0,i;

4 for (i=1;i<=n;i++)

5 sum+=i;

6 return sum;

7 }

// 查看main函数附近的源码

(gdb) list main

3 int sum=0,i;

4 for (i=1;i<=n;i++)

5 sum+=i;

6 return sum;

7 }

8 int main(){

9 int res=getSum(100);

10 printf("1+2+...+100=%d\\n",res);

11 }

// 设置断点

// break +n在第几行设断点

(gdb) break 8

Breakpoint 1 at 0x4004fa: file buging.c, line 8.

// break +函数名 ,在函数名处设断点

(gdb) break getSum

Breakpoint 2 at 0x4004cb: file buging.c, line 3.

//查看断点信息

(gdb) info breakpoints

Num Type Disp Enb Address What

1 breakpoint keep y 0x00000000004004fa in main at buging.c:8

2 breakpoint keep y 0x00000000004004cb in getSum at buging.c:3

断点信息中每一项的信息:

1.Num 列代表断点编号,该编号可以作为 delete/enalbe/disable 等控制断点命令的参数
2.Type 列代表断点类型,一般为 breakpoint
3.Disp 列代表断点被命中后,该断点保留(keep)、删除(del)还是关闭(dis)
4.Enb 列代表该断点是 enable(y) 还是 disable(n)
5.Address 列代表该断点处虚拟内存的地址
6.What 列代表该断点在源文件中的信息

?

1

2

3

4

5

6

7
// 删除断点

// delete +n 或 d +n

// 如果不加数字则删除全部的断点

(gdb) d 2

(gdb) info breakpoints

Num Type Disp Enb Address What

1 breakpoint keep y 0x00000000004004fa in main at buging.c:8

关闭和启用断点:

有时候,我们会遇到这种情况:有些断点可能暂时不用但又不想删除,那么可以disable.

?

1

2
disable +n //关闭断点

enable +n //启动断点

GDB单步调试

以本文开头的buging.c文件为例,进行单步调试

?

1

2

3

4

5

6

7

8
// 进入gdb

[yqtao@localhost linux]$ gdb buging

// 在main()函数处设断点

(gdb) info breakpoints

// 运行程序

(gdb) run

Breakpoint 1, main () at buging.c:9

9 int res=getSum(100);

注意:我们要进入函数要是用step(s),而单步执行next(n),next是不进入函数内部的,要区分两者的关系。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27
(gdb) step

getSum (n=100) at buging.c:4

4 for (i=1;i<=n;i++)

// 查看代码

(gdb) l

1 #include <stdio.h>

2 int getSum(int n) {

3 int sum=0,i;

4 for (i=1;i<=n;i++)

5 sum+=i;

6 return sum;

7 }

8 int main(){

9 int res=getSum(100);

10 printf("1+2+...+100=%d\\n",res);

// 下一步

(gdb) s

5 sum+=i;

// 打印sum的值

// 看到sum是为赋初值的

(gdb) p sum

$1 = 4195633

// info locals

//打印当前断点处所在函数的所有局部变量的值,不包括函数参数。

(gdb) info locals

sum = 4195635

i = 3

其余的一些命令:

finish

执行程序到当前函数结束

continue

执行程序到下个断点

until

until N,执行程序到源代码的某一行

总结

以上就是本文关于Linux调试工具GDB使用简易教程的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

原文链接:http://blog.csdn.net/taoyanqi8932/article/details/53385022

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Linux调试工具GDB使用简易教程 https://www.kuaiidc.com/64075.html

相关文章

发表评论
暂无评论