系列文章目录
GDB再学习(1):前言
GDB再学习(2):编译
GDB再学习(3):GDB的启动和运行
GDB再学习(4):程序准备
GDB再学习(5):常用指令介绍
GDB再学习(5.1):常用指令介绍_print/display_查看变量或寄存器中的值
GDB再学习(5.2):常用指令介绍_examine_查看内存区域的数值
GDB再学习(5.3):常用指令介绍_backtrace_查看函数栈
GDB再学习(5.4):常用指令介绍_ptype/whatis_查看程序符号表
GDB再学习(6):断点调试之软件断点
GDB再学习(7):断点调试之硬断点
GDB再学习(8):断点调试之数据断点
GDB再学习(9):断点调试之事件断点
GDB再学习(10):线程调试相关
GDB再学习(11):如何生成Core文件
GDB再学习(12):gdb server的使用
下面汇集一些gdb调试时候,常用的指令,部分指令后再后续的文章中进行说明。
1 基本指令
指令 | 说明 |
---|
set args xxx | 传递参数xxx |
set var | 修改变量的值 |
file xxx | 载入目标程序xxx |
attach pid | 通过PID链接程序 |
start/s | 启动运行 程序会停在main()函数的开始处 |
continue/c | 继续运行 |
run/r | 运行程序 |
quit/q | 退出gdb |
2 调试相关
指令 | 说明 |
---|
next | 进行单步跟踪,后面带数字,表示命令运行的次数 |
step | 跟踪进入函数体内,后面带数字,代表需要运行的次数 |
list | 显示跟踪点附件的代码 |
until | 不带参数,和next效果一样,带参数数字,代表直接跳到我们希望的停止点 |
jump | 强制跳转执行 |
finish | 运行完直接返回 |
return | 在某函数内直接返回,带参数,表示要返回的数值 |
info registers/reg | 查看寄存器的值 |
info all-registers/all-reg | 查看全部寄存器的值 |
info locals | 查看所有局部变量值 |
info args | 查看函数参数的值 |
info frame | 查看当前帧的信息 |
info stack | 查看栈信息 |
info variables | 查看程序中的变量符号 |
info functions | 查看程序中的函数符号 |
info address symbol | 查看symbol的地址 |
info symbal addr | 查看存储在地址addr中的符号名称 |
where | 查看栈信息 |
bt | 查看程序的调用栈 |
bt n | 查看最里n帧栈的信息 |
bt -n | 查看最外n帧栈的信息 |
bt full | 查看栈和局部变量的信息 |
frame n | 切换栈帧到编号为n中去 |
print | 查看变量的值或者地址 |
display | 查看变量的值或者地址 |
whatis xxx | 查看程序符号表 |
ptype xxx | 查看程序符号表 |
3 断点相关
指令 | 说明 |
---|
break | 设置软件断点 |
tbreak | 设置一次有效软件断点 |
rbreak | 后跟参数,和参数匹配的所有函数上设置断点 |
info breakpoints | 查看断点 |
delete | 删除断点 |
enable | 使能断点 |
disable | 使断点无效 |
hbreak | 设置硬断点 |
thbreak | 设置一次有效硬断点 |
watch | 设置数据断点 |
catch | 设置事件断点 |
4 线程相关
指令 | 说明 |
---|
thread thread-id | 切换thread-id为当前线程 |
info threads [id] | 查询指定id线程或全部线程信息 |
thread name [name] | 为当前线程设置一个名称 |
thread find [regexp] | 查找与regexp匹配的线程信息 |
break location thread thread-id [ if cond ] | 在location指定的位置处建立断点,断点的作用范围为指定ID的线程内 |
thread apply [thread-id-list / all] args | 将args命令(next/continue/silent/quiet等)作用于指定的线程或者全部线程 |
set scheduler-locking mode | 线程锁定模式 |