下面是GDB使用的一个实例,希望读者对gdb有一个好的认识,本文介绍的指令都是最基本和最常用的指令,动手操作一下,可以更好更快的掌握gdb的使用方法哦。
首先,有一下程序段:
#include <stdio.h>
int add(int m)
{
int i,n=0;
for(i=0;i<=m;i++)
n+=i;
printf("sum = %d\t\t",n);
}
int main()
{
int i,n=0;
add(50);
for(i=0;i<=50;i++)
n+=i;
printf("main sum = %d\n",n);
}
---------注意使用GCC编译时加上”-g“选项。
**1、进入gdb:
输入gdb和要调试的可执行文件名,出现了gdb相关信息,接下来就进入了”(gdb)”开头的命令行界面,效果如下**
coco@ubuntu:~/gdbtest$ gdb 1test
GNU gdb (Ubuntu 12.0.90-0ubuntu1) 12.0.90
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from 1test...
2、查看文件:
在gdb窗口中输入”L“的小写字母”l“(list)即可查看载入的文件。
3、设置断点:
在gdb中设置断点很简单,在“b”后面加入对应的行号就可以了(最常用),如下:
上图在第六行添加了一个断点,可以用此方法添加多个断点。
(注意:设置断点是指代码运行到对应的行之前暂停,并没有运行到断点的行)
4、查看断点情况:
设置完断点后,可以使用“info b”来查看断点设置情况,如下:
上图中可以看出设置了一个断点。
5、运行代码:
GDB默认从首行开始运行代码,键入“r”(run)即可,在r后面加上行号可以使程序从指定行开始运行。
可以看出,从第4行运行到断点处就暂停了。
6、查看变量值:
在程序停止后,可以查看断点处相关的变量值:在gdb中输入“p 变量名”即可。
i为什么是这样的数值?***读者自己思考一下哈哈。(ps:联系一下上文说到断点的运行结果就会明白了哈)
7、观察变量:
gdb的命令行输入“watch 变量名”来查看变量值变化情况。
8、单步运行:
输入“n”(next)即可,一次只运行一条语句,方便我们查看程序运行结果。
9、程序继续运行
命令“c”(continue)可以使程序继续往下运行,知道再次遇到断点或者程序结束。
10、退出GDB
直接输入“q”(quit)即可。
以上就是gdb调试最常用并且是最基本的调试方法,跟着教程过一遍就算学会使用gdb来做最基本调试了。
**附:
*上文说的变量值问题:原因就是程序在断点对应的行之前停的,这个时候代码并没有把变量i的值赋为0,而是一个随机数值。