GDB调试

一、GDB简介

GDB : GNU Debugger,是GNU工程为GNU操作系统开发的 调试器,但它的使用不局限于GNU操作系统, GDB可以运行 在UNIX、Linux甚至Microsoft Windows。

GDB可以调试C、C++、Objective-C、Pascal、Ada等语言编 写的程序;被调试的程序可以跟GDB运行于同一台电脑,也可 运行于不同电脑。

二、GDB使用

1、程序要能被调试,必须包含调试信息 ;
2、编译程序时,通过gcc的-g选项为程序添加调试信息,例如: gcc –g –o helloworld helloworld.c

使用GDB我们可以:
– 设置断点使程序停住
– 监视或修改程序中变量的值
– 跟踪代码执行过程

三、GDB常用命令

• file 装入想要调试的可执行文件。
• kill 终止正在调试的程序。
• list 列出产生执行文件的源代码的一部分。
• next 执行一行源代码但不进入函数内部。
• step 执行一行源代码而且进入函数内部。
• run 执行当前被调试的程序。
• c 继续运行程序。
• quit 终止gdb。
• watch 使你能监视一个变量的值而不管它何时被改变。
• backtrace 栈跟踪,查出代码被谁调用。
• print 查看变量的值。
• make 使你能不退出gdb就可以重新产生可执行文件。
······
• break命令的使用
– 根据行号设置断点: • (gdb) break linenum
– 根据函数名设置断点: • (gdb) break funcname
– 执行非当前源文件的某行或某函数时停止执行:
• (gdb) break filename:linenum
• (gdb) break filename:funcname
– 根据条件停止程序执行:
• (gdb) break linenum if expr
• (gdb) break funcname if expr

四、GDB调试举例

(1)用vi编辑器编写代码,能实现整型数的反转功能

1、建立cover.c文件

#include<stdio.h>
void Showcover(int iNum)
{
         while (iNum > 10)
        {
                printf("%d",iNum % 10);
                iNum=iNum/10;
        }
        printf("%d\n",iNum);
}
int main(void)
{
        int iNum;
        printf("Please input a number :");
        scanf("%d",&iNum);
        printf("After revert:");
        Showcover(iNum);
}

2、编译

gcc -o cover -g cover.c
编译时加-g选项
在这里插入图片描述
(gdb) l
显示代码及行号
在这里插入图片描述

  • 通过行号设置断点

在这里插入图片描述

  • 通过函数名设置断点

在这里插入图片描述

  • 查看断点所有信息

在这里插入图片描述

  • 执行程序

在这里插入图片描述

  • 查看iNum类型

在这里插入图片描述

  • 继续执行

在这里插入图片描述

  • 打印iNum的值

在这里插入图片描述

  • 单步调试

在这里插入图片描述

(2)段错误调试

1、建立over.c文件

#include<stdio.h>
#include<string.h>
#define BUFSIZE 256
static char acBuf[BUFSIZE];
static char *pStr;
int main(void)
{
	printf("Please input a string:");
	gets(pStr);
	printf("\nYour string is:%s\n",pStr);
}

2、编译

gcc -o over -g over.c
末尾显示段错误
在这里插入图片描述

  • 打印pStr的值

在这里插入图片描述

  • 设置断点

在这里插入图片描述

  • 重新运行程序

在这里插入图片描述

  • 修改变量的值

在这里插入图片描述

五、总结

通过本次实验我更加熟悉linux系统下 gdb调试器的使用,gdb的作用,也更加清楚了解了常用的gdb指令,也掌握了gdb下程序的调试方法。

参考文献

《GDB调试器及调试方法》

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页