自己在使用GDB过程中积累和整理了一份GDB常用命令表,分享出来,方便大家查找命令。
GDB 常用命令表
命令字 | 功能 |
print/p var | 显示变量值 |
print/p &var | 显示变量地址 |
print/p *pvar | 显示指针指向值 |
list/l file:N | 显示源代码 |
backtrace/br | 显示当前调用栈 |
show args | 显示缺省参数 |
next/n | 单步执行遇到子函数不进入 |
step/s | 单步执行遇到子函数进入 |
continue/c | 继续运行直到下一个断点 |
info source | 显示当前位置的源代码 |
info break | 查看所有断点 |
ni | 汇编的next |
si | 汇编的step |
layout asm | 显示汇编源码 |
info reg/r | 显示寄存器值 |
print/p var | 打印变量 var的值 |
p/c var | 以字符串格式打印 var的值 |
p/f /x /t /o /d | f-float x-hex t-二进制 o-八进制 d-十进制 |
ctrl+x a | 切换出tui模式,可以使用上下箭头按钮 |
info locals | 显示本地所有变量值 |
info args | 显示当前函数的调用参数 |
where | 显示当前在哪儿 |
update | 刷新源码窗口至当前执行点 |
finish | 执行完本函数 |
ctrl-x o | 下一窗口 |
fs s | 切换到源码窗口 |
fs c | 切换到命令行窗口 |
fs a | 切换到汇编窗口 |
fs r | 切换到寄存器窗口 |
fs n/next | 切换到下一窗口 |
fs p/pre | 切换到上一窗口 |
refresh | 刷新屏幕 |
func/f 函数名或地址 | 显示指定地址的代码 |
info threads | 显示所有线程 |
thread ID | 切换到指定ID的线程 |
break main.c:30 thread all | 在所有线程上设置断点 |
set schedule-locking off|on|step | 这个是在调试多线程的时候,在跟踪一个线程时如何控制其它的行为。 OFF: 表示不锁定其它线程 ON: 只有当前线程会执行
|
thread apply all command | 所有被调试线程执行GDB命令的 command, 即command 命令应用到所有线程 |
thread apply id1 id2 command | 调试命令只在线程ID1 ID2中执行 |
save breakpoints [filename] | 保存断点信息到 filename |
source [filename] | 执行 filename中的 command ,可以用于恢复 前面save breakpoints 保存的断点信息 |
thread | 显示当前的线程信息 |
x/nfu <addr> | 显示内存中的内容 x(examine) n 表示要显示内存单元个数 ------------------- f 显示方式 : x 按十六进制格式显示变量。 d 按十进制格式显示变量。 u 按十进制格式显示无符号整型。 o 按八进制格式显示变量。 t 按二进制格式显示变量。 a 按十六进制格式显示变量。 i 指令地址格式 c 按字符格式显示变量。 f 按浮点数格式显示变量 ----------------- u表示一个地址单元的长度 b表示单字节, h表示双字节, w表示四字节, g表示八字节
x/16xb |
clear linenum clear filename:linenum info b del breakNo del startNo-EndNo 删除范围 | gdb 的几种清楚断点的方式,都可以使用 |
handle SIGSTOP nostop noprint pass | GDB中忽略所有 assert 导致的BREAK |
layout asm layout src layout next/prev layout split | 显示当前崩溃地址的汇编 显示源码窗口 切换不同窗口 上下分隔窗口
|
info reg eax | 显示寄存器EAX的值 |
focus cmd/src/asm/regs/next/prev | 简写 fs 切换窗口焦点 |
set var localname=value | 设置变量 localname 的值为 value |
|
|