GDB简单调试方法

1.       列文件清单

列出3到6行代码:



2.       run执行程序;利用set args命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。

3.       设置启动参数使用命令: set args -st=1




4.       利用print 命令可以检查各个变量的值。

注:print 是gdb的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。


表达式除了包含你程序中的变量外,还可以包含以下内容:
a)     对程序中函数的调用
(gdb) print find_en try(1,0)
b)     数据结构和其他复杂对象
(gdb) print *table_start
$8={e=refere nce=’\000’,lo cation=0x0,n ext=0x0}
c)      值的历史成分
(gdb)print $1 ($1为历史记录变量,在以后可以直接引用 $1 的值)
d)     人为数组
人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容的方法。早期的调试程序没有很好的方法将任意的指针换成一个数组。就像对待参数一样,让我们查看内存中在变量h后面的10个整数,一个动态数组的语法如下所示:
base@length
因此,要想显示在h后面的10个元素,可以使用h@10:
(gdb)print h@10
$13=(-1,345,23,-234,0,0,0,98,345,10)
 
4.       断点设置
利用break命令(可以简写为b)在调试的程序中设置断点
该命令有如下四种形式:
a)     break line-number 使程序恰好在执行给定行之前停止。
b)     break function-name 使程序恰好在进入指定的函数之前停止。
c)      break line-or-function if condition 如果condition(条件)是真,程序到达指定行或函数时停止。
d)     break routine-name 在指定例程的入口处设置断点

注:从断点继续运行,执行countinue 命令(可以简写为c)


5.       断点管理
a)     显示当前gdb的断点信息:

b)     删除指定的某个断点

c)      禁止使用某个断点

d)     允许使用某个断点


6.       变量的检查和赋值
a)     whatis:识别数组或变量的类型

b)     ptype:比whatis的功能更强,他可以提供一个结构的定义

c)      set variable:将值赋予变量


7.       单步执行
a)     next
不进入的单步执行


b)     step
进入的单步执行


注:如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish。
8.       函数的调用
a)     call name 调用和执行一个函数

b)     finish 结束执行当前函数,显示其返回值(如果有的话)
 
9.       quit退出gdb程序


GDB: The GNU Project Debugger

转载于:http://www.linuxso.com/linuxbiancheng/12389.html

你可能感兴趣的:(调试技巧)