简图记录-GDB调试基础

来源:互联网 发布:思维导向图软件 编辑:程序博客网 时间:2024/04/27 23:29

简图记录学习~

一、概念

GDB: GNU开源组织发布的类unix环境上 ,针对待调试信息的可执行文件(编译带-g参数)调试工具。

功能:主要提供了各类运行指令和停止点进行程序执行控制,提供程序状态(变量/表达式)、栈信息、寄存器、内存的内容查看

启动方式:1、直接启动 gdb test 2、带core文件启动 gdb test core.txt 3、通过绑定进程号调试 gdb test 5

日志管理(默认关闭、不覆盖):

1、开关日志 set logging on/off  2、修改日志名 set logging file wuya.txt 

3、查看日志状态show logging 4、设置日志覆盖 set logging overwrite on/off

二、基本运行控制指令

启动程序运行: run [启动参数]

继续执行:(到下一个停止点)continue [忽略停止点数];  (到函数尾)finsh 

单步执行:(单步)step [步数] ;(单步且不进入调用函数)next [步数] ;(不进入函数且不在循环停止)until [步数]

中断当前函数立即返回执行:return [返回参数]

设置运行参数:set args XXXX


三、停止点指令

概念:停止点用于方便执行暂停

分类:断点(主动设置在某行、某函数、某地址处)、观察点(当某个表达式被读写时) 、捕获点(事件发生)

删除方法:停止点删除方式一样,通过clear 函数名/行号 清除指定处停止点、delete 停止点号 删除对应编号停止点、enable/disable 停止点号 进行使能去使能

1、断点:

查看断点:info breakpoints

添加断点:break 位置信息(可为:[文件名;]行号; [文件名;]函数名 ;+位置偏移;-位置偏移;*地址)

添加条件断点:break 位置信息 if 条件

 2、观察点:

查看观察点:info watchpoints

添加观察点:(表达式值变化)watch 表达式;(表达式被读)rwatch 表达式;(表达式被读写)awatch 表达式

3、捕获点:

查看捕获点:info catchpoints

添加捕获点:catch 事件(可为:throw异常抛出 catch异常捕获 excec/fork/vfork对应函数调用 load/unload [库名]库加载卸载)

添加一次捕获后自动消除捕获点:tcatch 事件


四、查看指令

1、查看源码

显示源码:list [显示位置] (缺省表示继续显示当前位置)

位置可为:[文件名:]行号 指定文件指定行号位置;[文件名;]函数名 指定文件指定函数位置;+[偏移量] 往下偏移处继续显示;-[偏移量] 往前继续显示;

设置显示行数:set listsize 行数

搜索源码:1、全部搜索 search 表达式 2、正向搜索 forword-search 表达式 3、反向搜索 reverse-search 表达式

2、查看运行数据(修改变量 set 变量名=值)

打印表达式:print [/指定打印格式] 表达式

表达式可为:变量名(防止重名覆盖 文件名::变量名 函数名::变量名);算术表达式;预处理宏名;数组(a[0]@10表示打印a[0]开始10个元素)

打印格式可为:x十六进制 o八进制 t二进制 d十进制 u无符号十进制 a地址形式 c字符 f浮点

自动打印(设置后可以在可见时自动打印):display 变量名 (查看 info display ;删除 undisplay 变量名)

3、栈内容

概念:gdb把每次函数调用产生的栈内容为1帧frame,从栈顶开始按0给帧编号

打印栈调用信息:backtrace [缺省:所有调用信息/数目:从栈顶打印指定数目调用(-n表示从栈底)/full:打印调用和变量]

打印帧信息:(默认为栈顶序号0帧,可用frame 帧编号 指定帧,或者up 上移动编号 down 下移动编号 进行帧编号调整)

打印当前帧信息(包括帧地址、调用地址、函数入参地址和值):info frame

打印当前帧 函数参数:info args

打印当前帧 局部参数:info locals

4、寄存器

打印非浮点非向量寄存器: info register

打印所有寄存器: info all-register

打印指定寄存器: info register 寄存器名

5、打印内存

x/[内存长度n 显示格式f 多少字节作为值显示u ] 地址

显示格式 和 print格式一致;

多少字节作为值显示:w 4字节(默认)、b 1字节、h 2字节、g 8字节

如 x/4uw 0x123456 (从0x123456地址开始打印4个地址,每个地址按4字节打印内容,打印格式按无符号十进制)

 


原创粉丝点击