您的位置:首页 > 编程语言

gdb 调试工具 --- 使用方法浅析

2017-07-17 10:37 453 查看

gdb 调试工具使用方法浅析

1. 什么是gdb

gdb是GNU debugger的缩写,是编程调试工具。

2. gdb的功能

启动程序,可以按照用户自定义的要求随心所欲的运行程序。

可让被调试的程序在用户所指定的调试断点处停住(断点可以是条件表达式)。

当程序停住时,可以检查此时程序中所发生的事。比如,可以打印变量的值。

动态改变变量程序的执行环境。

3. gdb的使用

运行程序

run(r)
运行程序,如果要加参数,则是
run arg1 arg2 ...


查看源代码

list(l)
:查看最近十行源码

list fun
:查看
fun
函数源代码

list file:fun
:查看
flie
文件中的
fun
函数源代码

设置断点与观察断点

break 行号/fun
设置断点。

break file:行号/fun
设置断点。

break if<condition>
:条件成立时程序停住。

info break(缩写:i b)
:查看断点。

watch expr
:一旦
expr
值发生改变,程序停住。

delete n
:删除断点。

单步调试

continue(c)
:运行至下一个断点。

step(s)
:单步跟踪,进入函数,类似于VC中的
step in


next(n)
:单步跟踪,不进入函数,类似于VC中的
step out


finish
:运行程序,知道当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。

until
:当厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序知道退出循环体。

查看运行时数据

print(p)
:查看运行时的变量以及表达式。

ptype
:查看类型。

print array
:打印数组所有元素。

print *array@len
:查看动态内存。
len
是查看数组
array
的元素个数。

print x=5
:改变运行时数据。

4. 程序错误

编译错:编写程序的时候没有符合语言规范导致编译错误。比如:语法错误。

运行时错误:编译器检查不出这种错误,但在运行时候可能会导致程序崩溃。比如:内存地址非法访问。

逻辑错误:编译和运行都很顺利,但是程序没有干我们期望干的事情。

5. gdb调试段错误

什么是段错误?段错误是由于访问非法地址而产生的错误。

访问系统数据区,尤其是往系统保护的内存地址写数据。比如:访问地址为0的地址。

内存越界(数组越界,变量类型不一致等)访问到不属于当前程序的内存区域。

gdb调试段错误,可以直接运行程序,当程序运行崩溃后,gdb会打印运行的信息,比如:收到了SIGSEGV信号,然后可以使用
bt
命令,打印栈回溯信息,然后根据程序发生错误的代码,修改程序。

6. core文件调试

6.1 core文件

在程序崩溃时,一般会生成一个文件叫
core
文件。core文件记录的是程序崩溃时的内存映像,并加入调试信息,core文件生成过程叫做
core dump(核心已转储)
。系统默认不会生成该文件。

6.2 设置生成core文件

ulimit -c
:查看core-dump状态。

ulimit -c xxxx
:设置core文件的大小。

ulimit -c unlimited
:core文件无限制大小。

6.3 gdb调试core文件

当设置完
ulimit -c xxxx
后,再次运行程序发生段错误,此时就会生成一个
core
文件,使用
gdb core
调试core文件,使用
bt
命令打印栈回溯信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  调试 gdb 编程 gnu