Ubuntu1804下安装gdb与使用

Ubuntu1804下安装gdb与使用

1. Ubuntu1804下安装gdb

sudo apt-get install gdb

查看安装版本:

gdb --version

GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.

2.Ubuntu1804下gdb使用

1. GDB调试实例

  • 首先创建一个C语言文件test.c
    vim test.c
#include <stdio.h>
void ShowRevertNum(int iNum)
{
    
     while (iNum > 10)
     {
    
        printf("%d", iNum % 10);
        iNum = iNum / 10;
     }
     printf("%d
", iNum);
}
int main(void)
{
    
     int iNum;
     printf("Please input a number :");
     scanf("%d", &iNum);
     printf("After revert : ");
     ShowRevertNum(iNum);
}

上面的代码可以逆序输出一个整型数,比如输入123,则输出321。

  • 使用gcc生成可执行文件并编译运行
gcc -o test1 test.c
./test1

运行结果:

可以看到,在输入100的时候输出结果是错误的

  • 下面开始用GDB进行调试, 进入gdb
gcc -o test1 -g test.c
gdb test1
  • 输入l查看代码, 运行结果:

  • 下断点

  • 发现问题

经过一步一步查看值的变化,发现iNum变成10了之后就不会再进入循环了,所以循环条件应该是大于等于10,我们要对错误进行修改,需要先退出gdb再进行对代码的修改。

  • 修改程序,解决问题

    程序编译运行后,输入100,得到正确的结果

2. 内存出错的GDB调试

Linux中,程序崩溃时,一般会产生core文件,记录进程退出前的状态,调试段错误问题,借助于该文件,可快速定位问题。

  • 首先让Linux系统产生core文件
    新建一个C语言文件,输入以下代码:
#include<stdio.h>
int main(void)
{
    
int *p=0;
*p=1;
return 0;
}

然后输入命令:

 ulimit –c 100

让系统产生core文件,运行程序,让程序崩溃,产生core文件,使用gdb配合core文件,定位问题

3.gdb的常用命令

命令 结果
file 装入想要调试的可执行文件
kill 终止正在调试的程序
list 列出产生执行文件的源代码的一部分
next 执行一行源代码但不进入函数内部
step 执行一行源代码而且进入函数内部
run 执行当前被调试的程序
c 继续运行程序
quit 终止gdb
watch 使你能监视一个变量的值而不管它何时被改变
backtrace 栈跟踪,查出代码被谁调用
print 查看变量的值
make 使你能不退出gdb就可以重新产生可执行文件
shell 使你能不离开gdb就执行UNIX shell命令
whatis 显示变量或函数类型
break 在代码里设断点,这将使程序执行到这里时被挂起
info break 显示当前断点清单,包括到达断点处的次数等
info files 显示被调试文件的详细信息
info func 显示所有的函数名称
info local 显示当函数中的局部变量信息
info prog 显示被调试程序的执行状态
delete [n] 删除第n个断点
disable[n] 关闭第n个断点
enable[n] 开启第n个断点
ptype 显示结构定义
set variable 设置变量的值
call name(args) 调用并执行名为name,参数为args的函数
Finish 终止当前函数并输出返回值
return value 停止当前函数并返回value给调用者

参考:
https://www.i4k.xyz/article/Linux7985/52399439
https://wizardforcel.gitbooks.io/100-gdb-tips/content/set-pagination-off.html

原文地址:https://www.cnblogs.com/michaelcjl/p/14887123.html