gdb工具的掌握也是了解源码编译的必备工具之一,我们没有办法一次性编译没有任何问题的源码,gdb就是调试源码的工具
1、什么是gdb
gdb是GNU debugger的缩写,是程序的调试工具
2、gdb的功能
- 启动程序,可以按用户的需求运行程序
- 设置断点
- 打印程序
- 动态打印程序变量
#include <stdio.h>
#include <stdlib.h>
long func(int);
int main(int argc, char *argv[])
{
printf("Entering main ...\n");
int i;
long result = 0;
for ( i = 1; i <= 100; ++i)
{
result += i;
}
printf("reslt[1-100] -= %ld\n", result);
printf("reslt[1-10] = %ld\n", func(10));
printf("Exiting main ... \n");
return 0;
}
long func(int n)
{
long sum = 0;
int i;
for ( i = 1; i <= n; ++i)
{
sum +=i;
}
return sum;
}
简单的使用下gdb
[root@ gdb]# gdb test //输入进入gdb调试环境
Reading symbols from /root/gdb/test...done.
(gdb)list //简写l 查看源码并显示行数
(gdb)break 10 //在第10行处设置断点
(gdb)break 24
(gdb)list 10 //查看10行处的代码
(gdb)info break // 简写i b;查看所有断点
(gdb)run // 运行程序,
Starting program: /root/gdb/test
Entering main ...
Breakpoint 1, main (argc=1, argv=0x7fffffffe618) at test.c:10
10 long result = 0;
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.107.el6_4.5.x86_64
(gdb) // 因为在10行设置了断点,所以在此次停止
(gdb) step //使用step运行下一步 简写s,这是单步调试
(gdb) print i // 打印i的值,简写p i
$i = 2
(gdb) print result
(gdb) until //跳出循环
(gdb) continue // 运行到24行的断点处, 简写c
(gdb) s
(gdb) 回车 // 这里的回车是指上一个命令
(gdb) filish // 退出方法
通过上面简单的运用,就知道gdb其实很好用的