马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
目录
一.查看有无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的操作
首先创建makefile、mycode.c文件,然后vim进行修改
makefile代码:
- mycode:mycode.c
- gcc-o $@ $^ -g
- .PHONY:clean
- clean:
- rm -f mycode
复制代码 mycode.c代码:
- #include<stdio.h>
- 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\n");
- 16 int top=100;
- 17 int sum=addToTop(top);
- 18 printf("sum:%d\n",sum);
- 19
- 20
- 21 printf("debug end\n");
- 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
|