前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >补充实验:GDB调试

补充实验:GDB调试

原创
作者头像
esse LL
发布2023-03-28 17:11:25
5620
发布2023-03-28 17:11:25
举报
文章被收录于专栏:操作系统实验

1. 创建工作目录

目录命名为班级加姓名的格式,如 1banz3

参考代码:

代码语言:shell
复制
mkdir 1banz3
# 切到 1banz3 目录:
cd 1banz3

2. 新建 C 文件

代码语言:shell
复制
# 新建 test.c 文件
touch test.c
# 编辑 test.c 文件
vi test.c

输入以下代码

代码语言:c
复制
#include<stdio.h>
void func()
{
    int i;
    for(i=2;i>=0;i--)
    printf("The result is %d\n",10/i);
}
void main()
{
    func();
}

这段代码中有错误,需要在后续的调试过程中修复,所以先不更正错误的代码。

可以使用cat命令查看文件的内容,如查看test.c:cat test.c

3. 编译 C 程序

代码语言:shell
复制
#编译test.c文件,生成可执行文件test
gcc -g test.c -o test

使用-g选项表示编译过程中生成调试信息,从而支持在后续使用GDB调试工具。

4. 运行可执行程序

代码语言:shell
复制
./test

因为代码中存在错误,所以在运行过程中遇到了浮点数例外问题

5. 使用GDB调试工具

代码语言:shell
复制
#键入gdb命令,回车确认,进入gdb程序中
gdb

如果提示没有gdb指令,可以运行sudo yum install gdb安装GDB调试工具 安装过程中,提示做选择时可以输入y按回车继续 (简单的说就是会出现两次选择,都按y然后按enter继续)

启动GDB后,某些行前面会显示(gdb)提示符,所以gdb指令都输在(gdb)提示符的后面。

6. 调试test可执行程序

(gdb)提示符后边输入file test命令装入要调试的可执行程序test。

提示Reading symbols from test...done.表示装入完成。

7. 运行test程序

(gdb)提示符后边输入run命令运行当前装入的程序,也就是test程序。

此时提示程序在第6行出错,也就是10/i操作引发了异常。

代码语言:txt
复制
Program received signal SIGFPE, Arithmetic exception.

0x000000000040113d in func () at test.c:6

6	    printf("The result is %d\n",10/i);

8. 查看变量

(gdb) 提示符后边输入 print i 命令查看此时i变量的值。

可以看到 $1 = 0 ,所以是10/0运算引发了除0异常

9. 断点调试

(gdb)提示符后边输入list命令查看前后5行代码及行号。

(gdb)提示符后边输入break 6命令,表示在6行设置断点,程序运行到该断点会等待用户输入信息再进行到下一步。

设置断点后可以输入run命令运行程序。

如果提示

The program being debugged has been started already. Start it from the beginning? (y or n) 可以按 y 和回车后继续。

程序运行到断点处会等待用户输入,此时可以输入next进行到下一个断点。

10. 监控变量的值

  • 输入run命令运行程序。
  • 输入watch i命令监控变量i的变化。
  • 监控设置完成后,输入next进行断点调试。

当变量i的值发生更新,GDB调试工具会输出该内存区域的变化:

代码语言:txt
复制
Old value = 2
New value = 1

11. 终止调试程序

调试完成后,输入kill可以终止正在调试的程序。

如果提示

Kill the program being debugged? (y or n) 表示询问用户是否确认终止程序,输入y表示肯定,n表示否定。

12. 退出GDB调试

输入quit可以退出GDB程序,回到Linux Shell。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 创建工作目录
  • 2. 新建 C 文件
  • 3. 编译 C 程序
  • 4. 运行可执行程序
  • 5. 使用GDB调试工具
  • 6. 调试test可执行程序
  • 7. 运行test程序
  • 8. 查看变量
  • 9. 断点调试
  • 10. 监控变量的值
  • 11. 终止调试程序
  • 12. 退出GDB调试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档