下面汇集一些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 |
线程锁定模式 |