目录命名为班级加姓名的格式,如 1banz3
参考代码:
mkdir 1banz3
# 切到 1banz3 目录:
cd 1banz3
# 新建 test.c 文件
touch test.c
# 编辑 test.c 文件
vi test.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
。
#编译test.c文件,生成可执行文件test
gcc -g test.c -o test
使用-g
选项表示编译过程中生成调试信息,从而支持在后续使用GDB调试工具。
./test
因为代码中存在错误,所以在运行过程中遇到了浮点数例外
问题
#键入gdb命令,回车确认,进入gdb程序中
gdb
如果提示没有gdb指令,可以运行
sudo yum install gdb
安装GDB调试工具 安装过程中,提示做选择时可以输入y按回车继续 (简单的说就是会出现两次选择,都按y然后按enter继续)
启动GDB后,某些行前面会显示(gdb)
提示符,所以gdb指令都输在(gdb)
提示符的后面。
在(gdb)
提示符后边输入file test
命令装入要调试的可执行程序test。
提示Reading symbols from test...done.表示装入完成。
在(gdb)
提示符后边输入run
命令运行当前装入的程序,也就是test程序。
此时提示程序在第6行出错,也就是10/i
操作引发了异常。
Program received signal SIGFPE, Arithmetic exception.
0x000000000040113d in func () at test.c:6
6 printf("The result is %d\n",10/i);
在 (gdb)
提示符后边输入 print i
命令查看此时i变量的值。
可以看到 $1 = 0
,所以是10/0运算引发了除0异常
在(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进行到下一个断点。
run
命令运行程序。watch i
命令监控变量i的变化。当变量i的值发生更新,GDB调试工具会输出该内存区域的变化:
Old value = 2
New value = 1
调试完成后,输入kill可以终止正在调试的程序。
如果提示
Kill the program being debugged? (y or n) 表示询问用户是否确认终止程序,输入y表示肯定,n表示否定。
输入quit可以退出GDB程序,回到Linux Shell。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。