GDB 调试精粹及使用实例
一:列文件清单
1. List
(gdb) list line1,line2
二:执行程序
要想运行准备调试的程序,可使用 run 命令,在它后面可以跟随发给该程序的任何参数,包
括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。
如果你使用不带参数的 run 命令,gdb 就再次使用你给予前一条 run 命令的参数,这是很有
用的。
利用 set args 命令就可以修改发送给程序的参数,而使用 show args 命令就可以查看其缺省
参数的列表。
(gdb)set args –b –x
(gdb) show args
backtrace 命令为堆栈提供向后跟踪功能。
Backtrace 命令产生一张列表,包含着从最近的过程开始的所以有效过程和调用这些过程的
参数。
三:显示数据
利用 print 命令可以检查各个变量的值。
(gdb) print p (p 为变量名)
whatis 命令可以显示某个变量的类型
(gdb) whatis p
type = int *
print 是 gdb 的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。
表达式除了包含你程序中的变量外,还可以包含以下内容:
l 对程序中函数的调用
(gdb) print find_entry(1,0)
l 数据结构和其他复杂对象
(gdb) print *table_start
$8={e=reference=’ ’,location=0x0,next=0x0}
l 值的历史成分
(gdb)print $1 ($1 为历史记录变量,在以后可以直接引用 $1 的值)
l 人为数组
人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容的方法。早期的调
试程序没有很好的方法将任意的指针换成一个数组。就像对待参数一样,让我们查看内存中
在变量 h 后面的 10 个整数,一个动态数组的语法如下所示:
base@length
因此,要想显示在 h 后面的 10 个元素,可以使用 h@10:
(gdb)print h@10
$13=(-1,345,23,-234,0,0,0,98,345,10)