GDB调试

来源:互联网 发布:linux报错ld返回1 编辑:程序博客网 时间:2024/06/06 09:38

一般来说,GDB主要帮忙你完成下面四个方面的功能:

    1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
    2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
    3、当程序被停住时,可以检查此时你的程序中所发生的事。

    4、动态的改变你程序的执行环境。

代码编译的时候要加 -g 

如:要编译simple.c文件

 gcc -Wall -g simple.c -o simple

gdb  simple

l(或list查看源代码)

break 10 (在第十行设置断点

info break(查看断点)(或者i b)

break func (在func的入口设置断点)

run(r,启动程序,这样程序就停止到了断点处)

s(然后单步跟踪他)

p i(查看 i 变量的值)

until (跳出循环)

c(运行到下一个断点处)

finish(不想跟踪 一个函数)

list(l)   查看最近10行源码

list fun 查看fun 函数源码

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

l 1 从第一行查看

l 1,15查看第一行到15 行的源码

l ,15查看到15行的源码

l fun 查看函数fun的源码

l test.c 查看这个文件

l test.c:fun 查看test.c的fun函数


break 行号

break fun

break file:行号

break file:fun

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

b if i=10 如果i = 10 就停下来

info break(i b)查看断点


watch expr - 一量expr值发生改变(当表达式改变时就停下来)

watch i 当i发生改变时就会停下来


delete n 删除断点


单步调试:

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

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

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

finish 运行程序,直到当前函数完全返回,并打印函数返回时的堆栈地址和返回值及参数等信息

until 当压卷了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体



print  查看变量的值

ptype  查看类型

print  array  查看数组

print  *array@len  查看动态内存

print  x = 5 改变运行时的数据



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

运行时错误:编译器检查不出这种错误,但在运行的时候可能会导致程序崩溃

逻辑错误:编译和运行都很顺利,但是程序没有干他该干的事情


段错误是由于访问非法地址而产生的错误:

可以先run程序,然后他会爆出 signal SIGSEGV 这个信号,下面会显示信息,

此时用bt 命令精确查出他所在的位置


core 文件调试

1.core文件

在程序崩溃时,一般会产生一个core文件,core文件记录的是程序崩溃时的内存映像,并加入调试信息。core文件生成的过程叫core dump

设置生成core文件

ulimit -c 查看core-dump状态

ulimit -c 数字(如:ulimit -c 1024)

ulimit -c unlimited

gdb 利用core文件调式

gdb 文件名core文件

bt




0 0
原创粉丝点击