gdb调试工具
对于一个程序可以生成:
release版本:属于发行版本,用于用户。 不能调试程序。
debug版本:属于调试版本,用于程序员。 可以调试程序。
gcc默认生成的是release版本的可执行文件,如果想要生成debug版本,需要加一个选项 -g。
进入 gdb调试: gdb + debug版本文件。
l 显示main函数所在文件的代码
list filename:line 显示filename文件line行的代码
b 行号 给指定的行添加一个断点 (向上搜索 第一个行号就添加行号)
b函数名 给指定函数的有效第一行添加一个断点
info b 断点信息
断点号 类型
Num(标识符) 断点的唯一标识符,用来记录和区别每个断点
Type(类型) 该字段指出当前断点是属于:断点、监视点还是捕获点
Disp(部署) 每个断点都有自己的一个部署(有3种可能的状态:保持-keep,删除-del,禁用-dis)
Enb(启用状态) 说明当前的该断点是 启用 还是禁用状态
Address(地址) 这是内存中设置断点的位置
What(位置) 该字段描述了当前该断点所处的文件名的行号位置信息
disable(enable) 断点号 使得断点无效(有效)
d 断点号 删除断点
调试过程:
r 开始执行,直接执行到运行到第一个断点处
n 单步执行
s 逐语句(可以进入函数)
finish 跳出函数
c 继续执行,直接执行到下一个断点处(r)
q 退出调试
查看变量的值:
p valname 显示p的值 可以 & * 操作
p 表达式 表达式的值(方法也可以)
display valname 自动显示 相当于是监视器 每次都会显示的。
info display 显示所有的display信息
undisplay+display 删除指定的自动显示
ptype valname 显示变量的类型,函数的类型也可以
如果数组名: p arr 打印数字的值
指向数组的指针: p *ptr@len 打印数组所有的
bt 显示函数调用栈 显示函数调用的经过。