Linux调试器-gdb使用


前言

  在Linux中编程时,需要对程序进行调试。本文以C语言程序举例子,主要介绍如何使用gdb进行调试。程序生成的二进制可执行文件有两种模式:debug模式和release模式,Linux gcc/g++出来的程序,默认是release模式,不能调试。所以要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,这样才能生成的可调试的执行文件。下面以一个例子说明如何生成可执行文件。

操作环境:Xshell 6、腾讯云


1 编写代码

  首先创建文件a.c,并编写如下代码:

#include <stdio.h>

void fun1()
{
    printf("Hello world!");
}
int main()
{
    int arr[10] = {0};
    int i = 0;
    for(i = 0; i < 10; ++i)
    {
        arr[i] = i; 
    }
    fun1();
    printf("How are you?\n");
    printf("I am fine, thank you, and you?\n");
    printf("Fine, goodbye!\n");
    printf("Bye!\n");
	return 0;
}

  首先尝试编译程序,并运行:如图1所示,第一步使用ls命令查看当前文件夹中只有源文件a.c。第二步使用gcc命令对源文件a.c进行编译,生成可执行文件ac。接着输入./ac运行程序,可以看到程序的运行结果。

下面对用到的命令功能详细解释:

  ls  列出当前目录下的所有子目录与文件。
  gcc a.c -o ac -g  把源文件a.c编译生成debug模式的二进制程序,并将该二进制文件命名为ac
  ./ac  运行可执行文件ac,./ 表示当前文件夹。
在这里插入图片描述

图1 编译程序

2 gdb调试命令

2.1 进入调试和退出调试

  在进行调试前首先介绍一下gdb的一些命令,为下文调试打基础。以下命令需要在调试过程中使用,所以要先使用gdb命令进入调试环境,记得要把中括号去掉,下文皆需要去中括号,不再提示。命令如下:

			命令:gdb [可执行文件]

  当想要退出调试时,按下Ctrl + d或者输入命令quit(简写为q)。
  比如我们对上面生成的可执行文件ac进行调试,如图2所示,执行命令:

							gdb ac

在这里插入图片描述

图2 调试的进入和退出展示

2.2 调试命令

  下文列出了一些常用的调试命令,并进行了简单的介绍,同时在命令后给出了对应命令的简写形式,请注意。

  1. list/l :显示10行源代码,每次输入命令list,都会接着上次的位置往下显示。
    list命令参数选项:
      list [行号n] 显示第n行的上下共十行进行显示。
      list [函数名] 列出某个函数的源代码。

  2. run/r:开始运行程序。[重要]

  3. next/n:单条执行,逐过程执行,不进入子函数内部。[重要]

  4. step/s:逐语句执行,进入函数调用[重要]

  5. break/b:在某一行设置断点[重要]
    break命令参数选项:
      break [行号n] 在第n行设置断点
      break [函数名]:在某个函数开头第一句程序设置断点

  6. info break/i b:查看断点信息 (information breakpoints)

  7. print/p:打印表达式的值,表达式可以为变量、指针、对象等,通过表达式还可以修改变量的值或者调用函数
    print命令参数选项:(假设我们定义了一个变量a)
      print a:打印变量a值。
      print &a:打印变量a的地址。
      print a=5:将变量a的值修改为5。

  8. continue/c:从当前位置开始连续而非单步执行程序

  9. delete breakpoints/delete /d:删除所有断点

  10. delete breakpoints [n]/delete [n]/d [n]:删除序号为n的断点

  11. disable breakpoints/disable:禁用所有断点

  12. enable breakpoints/enable:启用所有断点

  13. disable breakpoints [n]/disable [n]:禁用第n个断点

  14. enable breakpoints [n]/enable [n]:启用第n个断点

  15. display [变量名]:跟踪查看一个变量,每次停下来都显示它的值

  16. undisplay:取消对先前设置的所有变量的跟踪

  17. until [n行号]:跳至n行,即直接执行到第n行

  18. breaktrace/bt:查看各级函数调用堆栈及参数(每个子函数都有一个堆栈序号)

  19. quit/q:退出gdb

2.3 开始调试

  进入调试后,输入list或l查看源代码

在这里插入图片描述

  首先在第13行和15行设置断点,通过i b命令可以看到断点信息,断点信息的最后的数字代表断点所在的行号。

在这里插入图片描述
  运行程序
在这里插入图片描述
  进入子函数fun1内部,退出调试

在这里插入图片描述


总结

  以上简略较为简单的介绍了使用gdb调试程序的过程,可以供初学者参考。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值