gdb 调试工具
gdb 调试工具
gdb 概述
gdb , GNU Debugger ,用于在 linux 上 调试 c/c++ 程序,
参考:
------
程序的编译
用 gcc 编译时,应加上 -g 参数,以让编译出的文件支持 gdb 调试,
格式:
gcc -g source_file
------
进入 gdb
gdb file 进入 gdb 程序,对 file 进行调试,
------
gdb 下的 命令
* 程序显示
l , list
显示程序,继续向后显示,
l i , list i
显示 i 行 周围的程序,包括 上下各几行,
l 1
从第1行 开始显示程序,
l - fun_name
显示 函数的程序,
l -
向前显示程序,
l +
向后显示程序,同 l
show listsize
显示1次默认显示几行
set listsize i
设置默认显示 i 行,
* 断点
b i , break i
设置 i 行为断点
b fun_name , break fun_name
设置 函数 的入口为断点,
info b,info break
列出断点,第1列为断点编号
d i , delete i
删除 编号为 i 的 断点,
* 程序 调试 运行
r , run
运行程序
n , next
单步执行
c , continue
运行,直到下一个断点,或程序结束
s , step
单步进入,如果有函数调用,则进入该函数,
finish
跳出当前函数,返回上级函数,如果当前就是最外层函数则无效,
* 查看变量
p var_name
显示 变量值
p *array_name@len
显示 数组的值,len 等于数组的长度,可以指定其他值,如 len-1,2,
因为 *array_name 取得了 数组的首地址,数组内存是连续的,因此指定一个长度后,就可以取出连续的值,
例子:
p *arr@len 打印整个数组
p *arr@len-1 打印数组,不包含最后1个值,
p *arr@2 打印数组的前2个元素
info locals
列出 当前函数中,所有局部变量的值
info args
列出 当前函数中,所有参数的值
info catch
列出 当前函数中,异常处理信息
x , examine
显示 指定内存地址中的值
* 自动显示
display var_name
设置自动显示的 变量 或 内存地址的值,当程序停住时这些值就被自动显示,
display
显示 被自动显示的 列表,其中第1列时编号
undisplay i
根据编号取消 自动显示
* 观察点
watch exp
添加 观察点 - 值写入,当表达式 exp 的值写入时,停止程序,
rwatch exp
添加 观察点 - 值读取,当表达式 exp 的值被读取时,停止程序,
awatch exp
添加 观察点 - 读写,当表达式 exp 的值被 读 或 写 时,停止程序,
info watchpoints
显示所有的 观察点,其中第1列是编号,
delete watchpoint i
删除指定编号的 观察点,
* 函数堆栈
bt , backtrace
显示函数的调用堆栈,
f i, frame i
显示第 i 层栈的信息,i=0 表示栈顶,
up , up i
显示向上 1 或 i 层 栈的信息,
down , down i
显示向下 1 或 i 层 栈的信息,
info f,info frame
显示当先栈中更多的信息,
* 程序跳转
u , until
跳出循环体,
jump i
强制 跳转到第 i 行执行
return
强制 结束当前函数
call fun_name
强制 调用函数
* 退出 gdb
q
退出 gdb
* 历史命令
回车
重复 上次的命令
* 搜索
search xxx
搜索
* 寄存器
info registers
查看寄存器
* 其他
show language
显示当前程序的 语言
*
------