稍微小小介绍一下

 gdb是GUN组织开发的Linux下的调试利器。一般用于调试C/C++程序。

GDB主要有以下4个功能:

        1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

        2、可让被调试的程序在你所指定的调置的断点处停住。

        3、当程序被停住时,可以检查此时你的程序中所发生的事。

        4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。下

直接进入主题

这是本次用来测试的代码

#include <stdio.h>

void f(){
    printf("hello linux!!\n");
}


int i=1;


int main(){
    f();
    i=4;
    printf("linux group!!\n");
    printf("i=%d\n",i);
}

 一.使用gdb调试(以test.c为例子哦)

使用gcc -g test.c -o test(或者g++ -g test.cpp -o test调试.cpp程序)命令编译需要调试的C语言程序,得到二进制文件test(也可定义为其他的)。

 二.执行gdb ./test.out进入调试状态

 在倒数第二行显示:Reading symbols from (no debugging symbols found)表示一切正常,奥耶

三.执行所需要的命令

(gdb)list【num】:显示以第num行为中心的10行代码。

 (gdb)list main :显示函数名为main的函数的源程序。

  (gdb)list :显示当前行后面的代码。

 

 (gdb)list - : 显示当前行前面的代码。

 

  (gdb)  b  main :为函数打断点,在进入函数的时候停止。

 

(gdb)b 路径+:+num  例如【(gdb)b  /home/aurora/cplus/gdb/test.c : num 】。 

 

(gdb)r     [run的缩写]  :开始运行程序,程序运行到断点的位置会停下来,如果没有遇到断点,程序会一直运行下去。

 

(gdb) n  [next的缩写]  :执行当前行语句,如果该语句为函数调用,不会进入函数内部执行代码。 

 

回车 :会显示后面代码的执行。 

 

(gdb) s  [step的缩写]  :执行当前行的语句,如果该语句为函数调用,则进入函数内部执行其中的第一条语句。注意注意!!如果函数是库函数或者第三方提供的函数,用s也是进不去的,因为没有源代码,如果是自定义的函数,只要有源码就可以进去。 

 

(gdb)info b  :显示设置的所有断点

 

(gdb) d [num] :删除第几个断点 

 

 也可以直接 d 1 2 ,同时删除第一个和第二个断点。

(gdb)  c   [continue的缩写]  :继续程序的运行,直到遇到下一个断点。

 

(gdb)   bt   [backtrace的缩写]  :查看各级函数调用以及参数  

 

 (gdb)  watch  变量名     :设置观察点

 

(gdb)info r   :查看寄存器

 

(gdb)  q   [quit的缩写]    :终止调试 

 

 最后我将常用的命令小小总结一下

 gdb的命令还有很多很多,多敲一敲它就能搞定它。

小小文案送给大家共勉吖

吹灭读书灯,一身都是月。

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐