【基本条件】
编译时需要加--gcc -g选项;
【基本命令】
l 查看源码
b 加断点
r 开始运行调试
n 下一步
s下一步但是会进入子函数
p 输出数据
c跳过直到下一个断点处
q表示程序退出
help 查询指令,可以使用help来查看其他指令的用法,例如help print;同【man】
shell 启动标准shell执行command,可以用exit退回gdb;
print 打印指令,可以 p/x[十六进制] p/d[有符号整形] p/u[无符号整形] p/o[八进制] p/t[二进制] p/a[作为一个地址] p/c[ascII码] p/f[浮点型] p/s[字符串]
examine 查看内存,与程序数据类型无关 简写为x
disassemble 反汇编 disassemble/m main 把代码合反汇编放在一起看;
info args 查看当前函数参数值
info locals 看当前函数栈上值信息
info registers 表示查看寄存器值
info symbol 堆栈
info thread 查看线程状态
info breakpoint 查看断点信息
------------------------------------------------------自定义命令开始------------------------------------------------------
def opso //自定义一个操作,直到走到end
bt //输出堆栈xinxi
call test_show() //调用函数打印信息
p/x g_name //查看变量
finish //结束进程
i r //查看寄存器
Detach
q
end
------------------------------------------------------自定义命令结束,执行自定义命令开始------------------------------------------------------
b test_break //打断点,当断点到此时,会执行以下command
commond
opso
end
------------------------------------------------------执行自定义命令结束------------------------------------------------------
b 17 if i == 8. 在17行设置一个断点,并且只有i==8的时候才会触发
d 后面跟断点索引1,2,3..(每打一个断点,都会有相应索引号)
clear 行数或名称. 删除哪一行断点. 看下面演示
【解析core文件】
ulimit -c unlimited
echo "/tmp/core-%e-%p" > /proc/sys/kernel/core_pattern
gcc -o main -g a.c
gdb main /tmp/core-main-10815
【数据断点】