linux系统中程序调试指令(gdb)

1.gdb调试调用

测试程序名为test.c,生成的可执行文件名为test,这两个名字都可以自定义。 插入调试信息有两种方式:

gcc -g test.c -o test
gcc -o test -g test.c

这里加上-g是为了在编译时把调试信息加到可执行文件里。因为调试是对最后的可执行文件进行处理而不是对其它文件(比如说.c文件)

2.启动gdb

gdb test

出现(gdb)开头,说明进入调试界面了。

3.调试操作指令

3.1 查看帮助

(gdb) help

3.2 查看文件

命令l(代表list,列出源码的意思), l 1,23 表示列出从第一行到第22行的源码(l 是小写L不是大写i,要注意)。

(gdb) l

3.3 插入断点

断点设置可以是行号也可以是函数入口。 命令b(代表break,设置断点的意思),除了上图的行数断点和函数断点外(前后鼻音口语区分一下),还有个条件断点。比如上图的示例:b 18 if i == 10 表示当i == 10 的时候才出现断点。

(gdb) b 18
(gdb) b 18 if i == 10

3.4 查看和删除断点

在设置完断点后可以通过info break来查看设置断点情况。(下面几个都可以,结果一样)

(gdb) info break
(gdb) info b
(gdb) i b

获取断点信息后,删除断点。删除指令后的数字为上图中的Num值,不是当初b进去的行号。

(gdb) d 2

3.5 运行代码

GDB默认是从首行开始运行代码,直接输入r;若想在指定行开始运行,在r后面加上行号。

(gdb) r
(gdb) r 18

3.6 单步执行

输入n (next)或者s (step)。 这两个的区别在于:如果有函数调用,s 会进入该函数而n 不会。

(gdb) n
(gdb) s

3.7 查看变量值

键入代码中存在的变量,即可查看,例如p,i两个变量。

(gdb) p i

3.8 恢复程序运行

执行c (continue),会跳到下个断点,如果后续没断点了就会执行完剩余程序。 若该断点在循环中,可以输入clear 断点行号 清除该设置的断点然后再跳往下个断点。

(gdb) c
(gdb) clear

3.9 查看函数堆栈

(gdb) bt

3.10 退出调试

执行finish 是退出函数,执行q 是退出gdb。

(gdb) q

补充

1.查看线程信息

info threads

2.回车键 重复上一条指令。

经验分享 程序员 微信小程序 职场和发展