基础gdb调试(学习篇)

本文介绍了如何使用gdb进行C语言程序的调试,包括设置断点、查看变量值、单步执行等操作。通过gdb,开发者可以更深入地理解程序运行过程,有效定位和解决问题。在编译时需添加-g选项,然后通过gdb启动程序进行调试。学会使用gdb,可以提升C语言编程的效率和质量。
摘要由CSDN通过智能技术生成

基础gdb调试


在学习C语言的过程中,你一定多多少少遇到过一些程序写错没能及时发现的情况。如果你没有过度的依赖IDE,你可能已经自己探索出了在程序中通过输出一些中间值的方式对程序进行调试。在这里,需要重新学习一个叫gdb的工具,它可以更方便地帮助你进行调试,让你“看见”程序在做什么,从而在过程中将一些不符合你预期的部分暴露出来。
通过gdb我们可以看见变量值的变化、决定程序什么时候继续执行下一步或是发现奇怪的内存访问行为。
要充分的利用gdb帮助我们找到程序编写时候的问题,我们需要在编译时使用-g作为一个编译参数(否则你将看不见函数名、变量名,而只能看到运行时的内存地址),例如:

在这里插入图片描述
再通过

gdb ./program

将程序在gdb提供的一个“受控制的环境”中运行起来。

这时候你会看到一系列关于gdb的说明和下面这样一个等待你通过命令进行调试的命令行。

如果你输入l(list的首字母),gdb会列出带着行号的10行程序,你可以根据这个行号进行进一步的调试。1之后可以加行号作为参数,列出这一行开始的10行(例如希望列出第1到10行时,我们可以写11)。

如果你输入b(breakpoint的首字母),则表示设置程序运行的断点,程序运行到断点时就会暂停运行。b之后既可以加函数名作为参数(例如当有一个函数名为func时,我们可以写bfunc),使程序在调用某一函数时暂停;也可以加行号作为参数(例如b5表示在第五行设置一个断点),使程序在运行某一行时暂停。
如果你输入r(run的首字母),程序则会开始运行,并且暂停在我们设置了断点的位置。

  1. 运行暂停时,我们如果输入p表达式(print的首字母)则表示我们希望在当前断点运行这个表达式并查看它的值。例如
    p++age[e]表示我们希望让age[e]自增1并查看自增后的值。注意:这个表达式会对之后的程序继续运行造成影响。
  2. 运行暂停时,如果我们输入n(next的首字母)程序会执行暂停位置后的下一条语句并再次暂停。
  3. 运行暂停时,如果我们输入c(continue的首字母)程序会继续执行到下一关断点再暂停(如果没有断点就会执行直到结束)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值