GDB调试器及简单的调试方法
前言
学习GDB之前我们要了解一下什么是GDB,学习GDB对我们程序的调试有什么作用。
GDB 是GNU工程为GNU操作系统开发的调试器,但它的使用不局限于GNU操作系统, GDB可以运行在UNIX、Linux甚至Microsoft Windows。
GDB可以调试C、C++、Objective-C、Pascal、Ada等语言编写的程序;被调试的程序可以跟GDB运行于同一台电脑,也可运行与不同的电脑用
GDB我们可以
设置断点使程序停住
监视或修改程序中变量的值
跟踪代码执行过程
1、GDB的使用
程序要能被调试,必须包含调试信息,因此在编译程序是需要为程序添加调试信息
如:gcc -g -o hello hello.c
编译之后便可以用GDB对程序进行调试。
2、简单程序调试
使用下面的代码实现对一个整型数的反转功能,但是输入100时结果出错,找到问题。
#include<stdio.h>
void x(int a)
{
while (a>10)
{
printf("%d",a%10);
a=a/10;
}
printf("%d\n",a);
}
int main(void)
{
int a;
printf("input a number:\n");
scanf("%d",&a);
printf("After rever:\n");
x(a);
}
(1)由于这是一个简单的程序,我们很容易就可以看出来错误之处在哪里,但是如果我们用GDB来进行调试找到错误之处的话,那么在编译生成可执行程序时,我们需要采用上面的编译方法。
(2)对生成的可执行程序 rever 进行调试
# gdb rever
之后就可以使用gdb的各种参数,对程序进行简单的调试,从而找到错误之处。
3、简单命令示
-
gdb l 显示代码及行号
-
gdb b 行号 通过行号设置断点
gdb 函数名 通过函数名设置断点
gdb info b 显示所有断点信息
-
gdb run 执行程序
gdb c 继续执行
由于之前在程序中以函数x进行了断点,并且在第6行设置断点,因此当程序执行到函数x或者执行到第6行时就会停止,此时输入命令c程序便会继续进行知道有结果。 -
gdb c 继续执行
gdb p a 打印a的值
gdb s 单步执行
gdb d 断点 删除这个断点
gdb q 退出gdb
3、core文件
Linux中,程序崩溃时,一般会产生core文件记录进程退出前的状态,调试段错误问题,借助于该文件,可快速定位问题。
可按如下步骤生成和使用core文件
– Step 1: 让系统产生core文件
• ulimit –c num #设定core文件容量(num为数字,为0是不产生core文件)
– Step 2: 运行程序,让程序崩溃,从而生成core文件
– Step 3: gdb配合core文件,定位问题
• gdb 程序名 core文件名 • 比如: gdb segDemo co
总结
gdb可以很好的帮我们对自己的代码进行简单的调试,当代码量很大时,我们肯定不能一条一条的去看自己的代码,此时gdb就可以我们快速的找到错误之处。熟练的掌握gdb一些命令的用法可以让我们事半功倍。