gdb 调试程序
一. 何为gdb
1. UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、真的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。
2. 总的来说,GDB, 又称GNU调试器,是用来帮助调试我们程序的工具
二. gdb 有何用
1. GDB可以干以下几件事:
1.1. 给程序设置(特定条件下的)断点
1.2. 当程序停在断点处时,我们查看所有变量、寄存器的值
1.3. 当程序停在断点处时,我们除了能查看所有变量、寄存器的值以外,还能在不改变源代码的情况下改变这些值(这个确实屌)
2. GDB 常用命令
三. gdb的使用
1. gbd 基本语法
1.1. 先写一个test.c
1 #include <stdio.h> 2 int main() 3 { 4 int a = 1; 5 int b = a; 6 printf("a = %d, b = %d\n",a, b); 7 return 0; 8 9 }
1.2. 编译文件
gcc -o test test.c -g
1.2.1. 加上-g选项以后,gcc在编译是会做以下额外的操作:
1. 创建符号表,符号表包含了程序中使用的变量名称的列表。
2. 关闭所有的优化机制,以便程序执行过程中严格按照原来的C代码进行。
1.3. 进入gdb
1.4. 常用命令使用
1.4.1. start
1. 用start开始单步调试,程序从main开始
1.4.2. 单步执行<n>
1.4.3. gdb断点调试
1.4.4. gdb 设置观察点
2. 使用gdb 定位段错误
2.1. 编写一个带有段错误的程序
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main(int argc, char *argv[]) 5 { 6 int a =1; 7 int b = 0; 8 printf("a/b = %d\n",a/b); 9 return 0; 10 }
2.1.1. 编译程序,及执行
2.2. 测试流程