Linux开发工具

--gdb入门()

一、概述

gdbGNUdebugger的缩写,是编程调试工具。



二、功能

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

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

3、当程序停住时,可以检查此时程序中所发生的事。

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



示例:

gcc -Wall -g simple.c -o simple #一定要记得加上-g选项,以便生成调试信息

gdb simple #启动gdb

list(l) #查看程序的十行代码

break(b) n #在第n行设置断点

info break(i b) #查看断点设置信息

break function (b function) #在函数的入口处设置断点

run(r) #启动程序,在断点处暂停

step(s) #单步跟踪

print i(p i) #打印i当前值

until #跳出循环

continue(c) #继续运行,直到下一个断点,如果一直运行到程序结束,则会打印程序结束信息

Enter(回车)#表示使用上一个命令

finish #退出整个函数,此时会打印函数的返回值

delete n #删除断点n

quit(q) #退出gdb调试





三、运行程序

1run(r) #运行程序,直到下一个断点或程序结束

2run arg1 arg2 … #运行程序并加上参数,如:r a b c d ...



四、查看源码

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

list fun -查看fun函数源码

list file:fun –查看file文件中的fun函数源码,如:lsearch.c:seq_search #如果只有一个文件包含有seq_search函数,则不必加”search.c:”

list 2,10 –查看从第2行到第10行源代码

list ,15 –查看最多到第15行的源代码



五、设置断点与观察点

break 行号

break 函数名称

break file:行号    #b search.c:4

break file:fun

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

info break(i b) –查看断点 #breakif i = 10

watch expr –一旦expr值发生改变,程序就停住。【设置观察点】

e.g. watchi #一旦i值发生改变,则程序暂停

delete n(d n) –删除断点n #d 1 d 1 2 3



六、单步调试

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

step(s)-单步跟踪,进入函数内部,类似于VC中的step in【但是不会进入没有提供源代码的函数】

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

finish-运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。但是不会跳出main函数。

until–当厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。如果一次没有跳出,则执行下一次



七、gdb常用命令总结

命令

作用

run(r)

运行,启动程序

list(l)

列出10行源程序

break(b)

设置断点

info break(i b)

打印断点详细信息

continue(c)

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

watch

设置观察点

step(s)

单步跟踪,类似于VC中的step in

next(n)

单步跟踪,类似于VC中的step out

finish

运行程序,直到当前函数返回,返回函数

until(u)

跳出循环(有时需要两次)

print(p)

查看运行时变量及表达式