调试工具GDB的基础指令

假设现在有文件c1.c,在该目录下打开命令行,用gcc进行编译,编译的时候加上‘-g’。它的目的是向编译后的可执行程序中加入包括源代码、符号表在内的调试信息,这些额外的内容将有助于GDB更好地完成调试工作:

接下来启动gdb并调试刚生成的程序a.exe:

由于版本不同,这里是gdb32。-silent用于屏蔽gdb的前导信息,否则它会先在屏幕上打印一堆免责条款。启动gdb后,它输出的信息表明已经读入了a.exe的符号表。接下来,gdb会显示自己的提示符“(gdb)”,提示并等待你输入调试命令。

在gdb中,设置断点的方法很多,包括在指定的内存地址处设置断点、在源代码的某一行设置断点或者在某个函数的入口处设置断点,命令是“b”或者“break”。下面我们将main函数的入口处作为断点:

b命令在执行后返回了断点的具体信息,也就是说,断点的内存地址为0x40155d,对应于源文件的第4行。

如果我们用内存地址的方式来设置这个断点,则可以是:

b *  0x40155d

*意味着是以内存地址作为断点的。

或者,如果用源代码行的形式设置这个断点,则可以是:

b 5

一旦设置了断点,下一步就是用‘r’或者‘run’命令执行被调试的程序,执行后会在第一个断点处停下来。

在运行了被调试程序后,GDB的输出信息显示程序已经启动,下一个将要执行的语句是第4行的“n=1;”注意,这条语句现在还没有执行。

“p”或“print”命令用来显示变量的值:

gdb的p命令用来打印一个变量的值,在这里是表达式n。gdb先计算表达式的值,并把它保存在一个存储区中,存储区的名字用“$”外加数字表示,并且这个数字会随着调试过程的进行不断递增(这意味着存储区也是不断开辟的)。上面的意思是表达式n的值保存在“$1”中,其内容为21。

“n”或“next”用于继续执行源文件中的下一行。

“c”或“continue”用来持续执行程序,直至遇到断点或者程序结束。

“q”或“quit”结束调试工作。

参考:《C语言非常道》李忠著

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值