LINUX

【基本条件】

编译时需要加--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

【数据断点】

原文地址:https://www.cnblogs.com/wangqiwen-jer/p/10986878.html