GDB快速入门

135 阅读1分钟

GDB全称GNU symbolic debugger,诞生于GNU计划,是一款程序调试器,如果脱离IDE环境,GDB将会是你强大的帮手。

GDB下载和使用

在windows环境中只要下载过C语言应该就会有GDB,这里主要介绍linux环境,也很简单

# centos
$ sudo yum install gdb
# ubuntu
$ sudo apt install gdb
# 其它系统类似

调试一个程序,例如我们现在要调试可执行程序a.out

$ gdb a.out

此外,如果我们要调试一个C语言的程序,我们需要在gcc编译时增加-g选项,这个选项告诉编译器添加调试信息

$ gcc -g main.c

GDB调试常用命令

下面是一些常用的命令,括号里面是命令的缩写,使用两者都可以

run(r)

启动程序,如果有断点则运行至第一断点,如果没有则运行到结束

next(n)

让程序往下执行一步

list(l)

列出程序源代码及其行号

break(b)

给程序打断点,可以给某一行打断点,也可以给一个函数打断点

$ b 行号
$ b 函数名

info(i)

查看调试信息,可以查看断点

$ i b

continue(c)

向下执行到下一个断点

print(p)

打印变量信息

调试core文件

core文件是内存的映象,当程序崩溃的时候,core文件保存了内存的状态,用于调试。由于core文件略大,默认被限制生成。

我们可以解除这个限制

$ ulimit -c unlimited

我们可以写一段会导致崩溃的程序

#include<stdio.h>
int main(){
    int *a = NULL;
    *a = 1; 
    return 0;
}

崩溃后产生core文件,我这里是core.2197,用GDB调试

$ gdb a.out core.2197

我们可以直接看到崩溃的地方

Program terminated with signal 11, Segmentation fault.
#0  0x00000000004004dd in main () at a.c:4
4           *a = 1;

ok,这就是GDB的简单使用了