c/c++调试工具gdb使用

gdb之前

gdb是gcc的调试工具,主要用于c/c++这两种语言的编程的调试。功能强大,主要体现在以下几点:

  • 可以按照用户自定义的要求随心所欲的运行程序
  • 可以设置断点,让程序在断点处停住
  • 当程序停住时,可以检查此时程序中运行状态

要调试程序,首先在编译的时候,必须把调试信息加到可执行文件中,使用gcc/g++ 的-g参数可以做到,如下:

1
gcc -g -o hello hello.cpp

启动gdb的方法:

1
gdb hello

hello是你的执行文件,一般在当前目录下

一个例子

接下来看一个例子

1
2
3
4
5
6
7
8
9
10
#include <iostream>
int main()
{
int a = 1;
a = a + 6;
char p[] = "you are amazing";
std::cout<<p<<std::endl;
std::cout<<"hello world\n";
return 0;
}

使用

1
gcc -g -o hello hello.cpp

编译之后,输入gdb hello,启动gdb。
结果如图1 如图1 启动
图1 启动

输入l,表示list,从第一行开始列出源码,如图2,再按下enter键,表示重复上一次命令
如图2 列出源码
图2 列出源码

执行’b 6‘表示设置再源码6行处设置断点,执行‘b main’表示再main函数处设置断点,执行‘info break’表示查看断点信息,图3 如图3 断点
图3 断点

执行r命令,表示运行程序图4 如图4 运行
图4 运行

输入n表示单条语句执行,输入p a,p p表示分别打印a的值和p数组的值,打印ascii码值,输入x/s p,输入bt查看函数堆栈,图5如图5 显示
图5 显示

输入finish推出函数,输入q结束调试。

总结

上面的例子一个使用了以下命令:l,b,r,n,p,bt,x/s,finish,q,调试一些简单的程序已经够用了,但是想要更加深入了解gdb,可以参考链接