ubantu中的GDB调试

本文详细介绍了在Ubuntu系统中使用GDB进行程序调试的方法,包括GDB的基本命令如`break`, `step`, `next`, `run`, `watch`等,以及如何设置断点、查看变量值和调用栈。通过一个实际的代码示例,演示了如何发现并修复程序中关于整数反转功能的错误。最后,强调了GDB在提高编程效率和查找程序漏洞上的重要性。
摘要由CSDN通过智能技术生成

ubantu中的 GDB调试

1、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给调用者。
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

2、GDB调试举例

下面的代码实现对一个整型数的反转功能,比如输入123,则输出321。但输入100时,程序的输出结果却不正确,请找出问题。
1、建立一个文件

vi gdbtiaoshi.c

在这里插入图片描述
2、把以下信息输入

#include <stdio.h>
void ShowRevertNum(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 : ");
 ShowRevertNum(iNum);
}

在这里插入图片描述
3、用gcc生成可执行代码,并执行查看程序执行结果

gcc -o gdbtiaoshi gdbtiaoshi.c
./gdbtiaoshi

在这里插入图片描述
由程序运行结果可以看出,输入563,则输出365。但输入100时,程序的输出结果却不正确。下面我们用GDB命令来调试程序,检查。
4、用GDB命令对程序进行调试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

由上图的单步调试可知,当iNum=10时,iNum不会再进入函数的循环,而是直接输出,造成输出结果与预期不同。按照要求,当iNum=10依旧进入循环。

5、修改gdbtiaoshi.c的循环条件为while(iNum>=10)
修改前退出gdb调试

quit

在这里插入图片描述
修改程序:
在这里插入图片描述
6、重新编译、运行程序
在这里插入图片描述

输出成功

总结:

在Ubuntu下进行GDB调试,提供了一种寻找程序漏洞的方式,可以让我们更快更好地找到程序错误的地方,提高编程效率。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值