gdb是调试程序,跟踪问题的一个非常好的手段,下面将详细的进行介绍它的具体用法
1 【首先介绍怎么用gdb运行程序】
用gdb编译程序时,首先在编译程序时加-g。
以上面的程序为例进行编译
gcc gdb_test.c -o gdb_test -g
有两种运行用法
- 一是在编译成功后输入gdb + 编译后的文件名
- 二是在命令行中先输入gdb,按回车,再输入file + 编译后的文件
这两种方法选择其中一个就可以。
然后输入run命令就可以将程序运行起来了,简写 r
2 【在程序中打断点】
- 使用break进行打断点 ,简写为b
- 可以对某一行进行打断点 例:对程序的第三行进行打断点 b 3
- 如果是多个文件,可以对某个文件的某一行打断点, 例:对gdb_test.c的第三行打断点 b gdb_test.c:3
- 可以对某个函数进行打断点 例:对本程序中func()函数打断点 b func
- 同理也可以对多个文件中的某一个文件的函数打断点,例: b gdb_test.c:func
- 例如对程序的第20行进行打断点 b 20
打完断点后,后显示一行内容,分别是第几个断点,在哪个文件中,第多少行
打完断点后进行运行程序,输入r命令
程序运行到第20行会自动停止,此时程序运行到了第19行,第20行还没有运行到。
我们可以先用p命令,打印一下程序中i的值,下面的博客会讲到p的用法
此时i的值为2.
如果想让程序继续运行,我们可以使用 c 命令
- 如果想退出程序,可以使用 q 命令。
- 如果我们想删除某个断点,有两种方法:
1 delete 命令 简写d
delete break 删除所有的断点
delete break n 删除某个断点 n为断点号
2 clear 命令
clear 行号 删除设在某一行的断点
这两种删除断点的用法就在于一个是依据断点号删除,一个是依据行号删除
- disable break n 禁用某个断点 n为断点号
- enable break n 使能某个断点 n为断点号
- 在第19行和第20行分别设置断点,然后运行程序。
- 程序在19行停住后,接下来进行对第20行的断点禁用
- 然后继续运行程序,你会看到在第20行没有停下来。所以说明禁用第20行的断点已经生效了。
- 查看断点信息:info b 查看所有断点信息
- info b n 查看第n个断点的信息