(centos)gdb的保姆级教学!!!
目录
一.查看有无gdb
二.gdb的操作
(1)gdb 中 list 与 l num的用法
(2)gdb中r、b与d的用法
(3)gdb中n和s的用法
(4)gdb中的p 与 display以及undisplay
(5)gdb中untill、finish与c的用法
(6)gdb中disable与enable的用法
(7)gdb中bar、bt与locals的用法
一.查看有无gdb
使用代码进行检查:
gdb --version
如果没有则运行代码:
sudo yum install -y gdb
二.gdb的操作
首先创建makefile、mycode.c文件,然后vim进行修改
makefile代码:
mycode:mycode.c
gcc-o $@ $^ -g
.PHONY:clean
clean:
rm -f mycode
mycode.c代码:
#include
2
3 int addToTop(int top)
4 {
5 int res=0;
6 int i=1;
7 for(;i<=top;i++)
8 {
9 res+=i;
10 }
11 return res;
12 }
13 int main()
14 {
15 printf("debug begin
");
16 int top=100;
17 int sum=addToTop(top);
18 printf("sum:%d
",sum);
19
20
21 printf("debug end
");
22
23
24 return 0;
25 }
~
首先我们输入make,然后会自动生成mycode的文件,再然后输入gdb mycode
(1)gdb 中 list 与 l num的用法
list会展示我们写的代码,l num并不是从num 行开始输出,而是以num为中心进行输出
首先按l 0,然后连续按住enter,会把剩余代码输出出来,并且展示代码有多少行
l+函数名,会显示函数名所在行与其下9行
(2)gdb中r、b与d的用法
r会直接运行代码,normally表示正常运行
b+行号就是断点的意思,类似于vs中的F9,info + b,就是查看断点
b 函数名,就会把断点打在函数名称入口的第一条代码
b 文件名:行号,就会把该断点设置在该文件对应的行数
其中info中第一列是我们设置断点的序号
删除断点不能d+行号,而是d+序号(info b中断点的序号)
当我们推出gdb,然后再进入gdb ,输入 info b,是不会显示之前设置的断点
(3)gdb中n和s的用法
n类似于vs中的F10,是逐过程,也可以用n+连续的enter来连续n的操作
s类似于vs中的F11(逐语句),同样也可以 s+连续的enter来连续s的操作
(4)gdb中的p 与 display以及undisplay
p与display都类似于vs中的监视,但是p运行过后之后再进行下一步就不会显示对应的内容,而display运行过后再进行下一步就会显示对应的内容
输入undispaly 则会取消display的监视
(5)gdb中untill、finish与c的用法
until 可以让我们快速的运行我们代码之间的代码块来确认范围
finish是以函数为单位进行来确认范围
c类似与vs中用F5查看F9设置的断点
(6)gdb中disable与enable的用法
disable的用法就是让设置的断点还存在,但不删除断点,运行时会忽视disable设置的断点
enable就是取消disable的设置
(7)gdb中bar、bt与locals的用法
set bar 变量=num,会让程序跳到 变量=num的位置运行
bt就是查看各级函数的调用以及参数情况
思路是我们先在32行设置断点,然后再r运行到断点 ,然后bt会查看到bt的结果
locals 查看当前栈帧的局部变量 i locals 等同于 info locals