东湖之滨 发表于 昨天 01:24

(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<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 mycodehttps://i-blog.csdnimg.cn/direct/fbb7033590304a1390594b0e3490871d.png
(1)gdb 中 list 与 l  num的用法

https://i-blog.csdnimg.cn/direct/1052c070f004443aaf0d6fcd5f1e67f2.pnghttps://i-blog.csdnimg.cn/direct/7c3f20b494ea4385989a70b2377046f3.png
list会展示我们写的代码,l num并不是从num 行开始输出,而是以num为中央举行输出
https://i-blog.csdnimg.cn/direct/733bc47d94964541a170f101b206e764.png
首先按l 0,然后连续按住enter,会把剩余代码输出出来,而且展示代码有多少行
https://i-blog.csdnimg.cn/direct/080b381f7eb848cb803f8b5cc7d8b66c.png
l+函数名,会体现函数名所在行与其下9行
(2)gdb中r、b与d的用法

https://i-blog.csdnimg.cn/direct/59d2f8d658f745648dc0bf3600a11aa0.png
r会直接运行代码,normally体现正常运行
https://i-blog.csdnimg.cn/direct/069d408a2498466fae312634768f55c9.png
b+行号就是断点的意思,雷同于vs中的F9,info + b,就是查看断点
https://i-blog.csdnimg.cn/direct/a68825b99a96478ea2480bd97d2be73b.png
b 函数名,就会把断点打在函数名称入口的第一条代码
https://i-blog.csdnimg.cn/direct/a1d0fabcc45a4fffbe22edf5624557e5.png
b 文件名:行号,就会把该断点设置在该文件对应的行数

其中info中第一列是我们设置断点的序号
https://i-blog.csdnimg.cn/direct/e56dd885d79f462e9866ff88db76f053.png
删除断点不能d+行号,而是d+序号(info b中断点的序号)
https://i-blog.csdnimg.cn/direct/6ad214e553ce487c944cd34dd2920c60.png当我们推出gdb,然后再进入gdb ,输入 info b,是不会体现之前设置的断点
(3)gdb中n和s的用法

https://i-blog.csdnimg.cn/direct/5d4b051c4de9422ca6c65a468ffdfb0e.pngn雷同于vs中的F10,是逐过程,也可以用n+连续的enter来连续n的操作
https://i-blog.csdnimg.cn/direct/0c76bcb8db084df3851affeb1ad5aff4.png
s雷同于vs中的F11(逐语句),同样也可以 s+连续的enter来连续s的操作
(4)gdb中的p 与 display以及undisplay

https://i-blog.csdnimg.cn/direct/6368dfd8d3b042c990242be67acaaaea.png
p与display都雷同于vs中的监视,但是p运行事后之后再举行下一步就不会体现对应的内容,而display运行事后再举行下一步就会体现对应的内容
https://i-blog.csdnimg.cn/direct/1a7ba34754be46ec92f194abdae0c469.png
输入undispaly 则会取消display的监视
(5)gdb中untill、finish与c的用法

https://i-blog.csdnimg.cn/direct/b16e6bd47e75428b8876c6babbe0e196.png
https://i-blog.csdnimg.cn/direct/8e9274bef24847929cdd568ebd8165d5.png
https://i-blog.csdnimg.cn/direct/6983a64ab6ac46328f589f1bd3edb222.png
until 可以让我们快速的运行我们代码之间的代码块来确认范围
https://i-blog.csdnimg.cn/direct/960e404512f54764b9663deaeed63cbb.png
finish是以函数为单位举行来确认范围
https://i-blog.csdnimg.cn/direct/d0f15da41adc4528b5e9e6b060c2bb4a.png
c雷同与vs中用F5查看F9设置的断点
(6)gdb中disable与enable的用法

https://i-blog.csdnimg.cn/direct/88937722edcc4979b3307c6efd3023fa.png
disable的用法就是让设置的断点还存在,但不删除断点,运行时会忽视disable设置的断点
https://i-blog.csdnimg.cn/direct/e5ac22a23f4d433d970a6f2de4caec80.png
enable就是取消disable的设置
(7)gdb中bar、bt与locals的用法

https://i-blog.csdnimg.cn/direct/48deb425db7a45ce9fd29ef0966d9ada.png
set bar  变量=num,会让程序跳到 变量=num的位置运行
https://i-blog.csdnimg.cn/direct/0388817cd81f4da6b81bbc598aeb16e7.png
https://i-blog.csdnimg.cn/direct/1180f5f6215e4b74bc61ae67a884480d.png
https://i-blog.csdnimg.cn/direct/65cced6dff0548a4add94d9922592647.png
bt就是查看各级函数的调用以及参数环境
思路是我们先在32行设置断点,然后再r运行到断点 ,然后bt会查看到bt的结果
https://i-blog.csdnimg.cn/direct/938eaf6be1d74b49a54e4032e774d00e.png
locals 查看当前栈帧的局部变量  i locals 等同于 info locals 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: (centos)gdb的保姆级教学!!!