您的位置:首页 > 其它

关于gdb的几个基本命令

2013-08-01 17:34 218 查看
程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。本文将主要介绍linux下的强大调试工具是怎么完成这些工作的。

之所以要调试程序,是因为程序的运行结果和预期结果不一致,或者程序出现运行时错误。调试的基本思想是:分析现象->假设错误原因->产生新的现象去验证假设

1.gcc -g main.c

要用gdb调试程序,必须在编译时加上-g选项,-g选项的作用是在可执行文件中加入源文件信息,但并不是将源文件嵌入可执行文件,所以在调试时必须保证gdb必须能找到源文件

2.$gdb 可执行文件名

进入gdb调试环境

3.(gdb)list n|list|list 函数名|l n|l|l 函数名

在调试过程中查看源文件,n为源文件的行号,每次显示10行。list可以简写为l,不带任何参数的l表示从当前执行行查看。

注意:在(gdb)中直接回车,表示执行上一条命令。

4.(gdb)start|s

开始执行程序,并main函数的停在第一条语句处。

(gdb)run|r

连续执行程序,直到遇到断点

(gdb)continue|c

继续执行程序,直到下个断点

(gdb)next|n

执行下一行语句

(gdb)step|s

进入正在执行的函数内部

(gdb)finish

一直执行到当前函数返回,即跳出当前函数,执行其调用函数

5.变量信息管理

(gdb)info 变量名|i 变量名|i locals

i变量名查看一个变量的值,i locals查看所有局部变量的值

修改变量的值

(gdb)set var 变量名=变量值

(gdb) print 表达式

打印表达式,通过表达式可以修改变量的值,p 变量名=变量值

(gdb)display  变量名

使得程序每次停下来都会显示变量的值

x/nbx 变量名

查看从变量名开始的n个字节,例x/7bx input 表示查看从变量input开始的7个内存单元的内容

6.查看函数调用栈

(gdb)backtrace|bt

查看其调用函数的信息

(gdb)frame n|f n

n为栈的层次,然后可以用其他命令(info)查看此级别的变量信息

7.断点管理

设置断点

break n|break 函数名|b n| b 函数名|b n(函数名)if 条件

n为行号,添加if表示设置条件断点,只有条件为真时,才中断

查看断点

info breakpoints|i breakpoints

删除断点

delete breakpoints n

使断点失效

disable breakpoints n

使断点生效

enable breakpoints n

其中n为断点的序列号,可以用info breakpoints查看

8观察点管理

断点是程序执行到某行代码是触发,观察点是程序访问某个内存单元时触发

(gdb)watch 变量名

当程序访问变量名指定的内存单元时,停止程序

info watchpoints|delete watchpoints

类似断点管理

9退出gdb环境

(gdb)quit|q
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: