稍微小小介绍一下
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的命令还有很多很多,多敲一敲它就能搞定它。
小小文案送给大家共勉吖
吹灭读书灯,一身都是月。