@学习摘录 701:GDB 简介 gdb常用命令包括,文件载入,断点设置与管理,数据显示,变量赋值,程序执行,函数调用等。 』GDB 调试器的功能就是让程序员在程序运行过程中了解程序的内部结构和内存的使用情况,以及 程序崩溃时状态,具体包括以下几个方面 : * 在程序中设置断点,使其在指定的代码行上暂停执行。 * 查看或修改程序中变量的值。 * 单步执行程序代码。 安装gdb : tar -zxvf gdb-6.8.tar.bz2 @学习摘录 702:GDB 启动和退出 前话 : $ gcc -g example1.c -o example1 gdb 的启动和退出 gdb可以自动识别命令的简写!!! $ gdb (进入) quit (简写 q) @学习摘录 703:载入程序 列出源代码 (gdb)list 执行程序 (gdb)run 帮助 (gdb)help $ gdb example1 (gdb) l 3, 5 (gdb) r @学习摘录 704:断点的设置与管理 (gdb) b 9 (gdb) r (gdb) c 【continue 继续】 break 命令后也可以跟函数名,使程序在进入指定的函数之前停下来。设置断点时,也可以进行条件判断。 int main() { int x; int sum; sum = 0; for(x = 1; x <= 10; x++) { sum += x; } printf("%d\n", sum); return 0; } (gdb)b 9 if x > 9 2,-- 查看断点信息 (gdb) info break 3,-- 删除指定的断点 (gdb) d 1 (gdb) d 1-6 4,-- 删除指定行上的断点 clear (gdb) clear 9 5,-- 禁用指定的断点,(gdb)disable 1 恢复指定的断点。 enable 1 6,-- 设置观察点 『 watch sum watch 命令是当变量或表达式的值发生变化时暂停程序的运行,如果想在变量或表达式 被读时暂停程序的运行,可以使用 rwatch 命令;如果想在变量或表达式被读或被写时 暂停程序的运行,可以使用 awatch. info watchpoints delete 命令来删除指定的观察点。 @学习摘录 705:数据显示与变量赋值 7,-- 显示变量或表达式的值 #include <stdio.h> int sum; void printinfo() { printf("1+2+3+4+...+10 = "); } int main() { int x[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int i; sum = 0; for(i = 0; i < 10; i++) { sum += x[i]; } printinfo(); printf("%d\n", sum); return 0; } ---- (gdb) p sum (gdb) p/x sum (gdb) 'example2.c'::sum (gdb) p *x@8 -2, 自动显示变量或者表达式的值 { display sum disable display, enable display, undisplay, delete display, info display info display } -3, 显示变量的数据类型 (gdb) whatis x type = int [10] (gdb) ptype sum type = int -4, 修改变量的值 (gdb)set sum = 100 (gdb)p sum (gdb)p x[2] = 16 (gdb)p x @学习摘录 706:程序执行与函数调用 -1, 单步执行 (gdb)r (gdb)s/n (gdb)s/n -2, 退出被调用的函数 return -3,until jump -4, 强制调用函数 01 (gdb) call printf("Beginning!\n") 02 Beginning! 03 $8 = 11 @学习摘录 707:其他常用命令 GDB 的命令很多。 1, 查看堆栈信息 backtrace命令(简写为 bt) 和 frame 命令 (简写为 f) (gdb) bt (gdb) f 1 frame 是用来显示栈帧的,后面跟栈帧的编号。 2, 查看源程序信息。 (gdb) info source 3, 查看寄存器。 (gdb) info registers 4, 查看程序的汇编代码(gdb) disassemble printinfo