GDB的命令
一、断点相关
1. breakInfo:根据一定的条件暂停程序的运行
|
命令 |
作用 |
|
break |
下一个指令处设置断点 |
|
break [file]:function |
在 file 文件的 function 函数入口设置断点 |
|
break [file]:line |
在 file 文件的第 line 行设置断点 |
|
break [+-] offset |
在当前偏移量 [+-] offset 处设置断点 |
|
break *addr |
在地址为 addr 处设置断点 |
|
break ... if expr |
设置条件断点,条件表达式 expr 为真时 |
|
info breakpoints |
查看断点 |
|
ignore n count |
对编号为 n 的断点忽略 count 次 |
|
clear |
清除所有断点 |
|
clear function |
清除所有位于 function 内的断点 |
|
clear [file]:line |
清除文件 file 的 line 行断点 |
|
clear n |
删除编号为 n 的断点 |
|
enable n |
启用编号为 n 的断点 |
|
disable n |
禁用编号为 n 的断点 |
|
save breakpoints file |
保存断点信号到 file 文件中 |
|
source file |
从 file 文件中导入断点信息 |
2. watchpoint:监控当监听的表达式或者变量变化时,程序暂停运行
|
命令 |
作用 |
|
watch variable |
监控 variable 变量 |
|
watch var1+var2 |
监控表达式值变化 |
|
rwatch variable |
监控数据读变化,仅支持硬件实现 |
|
awatch variable |
监控数据读写变化,仅支持硬件实现 |
|
info watchpoints |
查看监控断点列表 |
|
set can-use-hw-watchpoints 0 |
强制 watch 使用软件实现 |
|
print &variable |
查看变量的内存地址 |
|
watch *(type*)address |
监控类型为 type 的 address 地址 |
|
watch -l variable |
指定 location 参数 |
|
watch variable thread 1 |
当线程 1 修改 variable 值时中断 |
3. cathcpoint:监控信号产生
|
命令 |
含义 |
|
catch fork |
调用fork时中断 |
|
tcatch fork |
设置的断点只触发一次 |
|
catch syscall ptrace |
为 ptrace 系统调用设置断点 |
二、命令行
|
命令 |
左右 |
|
run arglist |
运行程序,arglist 是程序的参数列表 |
|
set args arglist |
指定启动命令行参数 |
|
set args |
指定空的列表参数 |
|
show args |
打印命令行列表 |
三、程序栈
|
命令 |
作用 |
|
backtrace [n] |
打印第 n 个帧栈 |
|
frame [n] |
选择第 n 个帧栈,如果不存在则打印当前帧栈 |
|
up n |
选择当前帧栈编号 +n 的帧栈 |
|
down n |
选择当前帧栈编号 -n 的帧栈 |
|
info frame [addr] |
打印当前选择的帧栈 |
|
info args |
当前帧栈的参数列表 |
|
info local |
当前帧栈的局部变量 |
四、多进程
|
命令 |
作用 |
|
info inferiors |
查看进程列表 |
|
attach pid |
绑定进程id |
|
inferior num |
切换到指定进程进行调试 |
|
print $_exitcode |
显示程序退出时的返回值 |
|
set follow-fork-mode child |
追踪子进程 |
|
set follow-fortk-mode parent |
追踪父进程 |
|
set detach-on-fork on |
fork 调用时只追踪其中一个 |
|
set detach-on-fork off |
fork 调用时会同时追踪父子进程 |
五、多线程
|
命令 |
作用 |
|
info threads |
查看线程列表 |
|
print $_thread |
显示当前正在调试的线程编号 |
|
set scheduler-locking on |
调试一个线程时,其他线程暂停执行 |
|
set scheduler-locking off |
调试一个线程时,其他线程同步执行 |
|
set scheduler-locking step |
仅用 step 调试时其他线程不执行,用其他命令如 next 时其他线程执行 |
六、打印输出
1. 打印变量
|
命令 |
作用 |
|
whatis variable |
查看变量类型 |
|
ptype variable |
查看变量详细的类型信息 |
|
info variables var |
查看定义该变量的文件,不支持局部变量 |
2. 打印字符串
|
命令 |
作用 |
|
x/s str |
打印字符串 |
|
set print element 0 |
打印不限制字符串长度或不限制数组长度 |
|
call printf(“%s\n”,xxx) |
打印不会含有多余转移符的字符串 |
|
printf “%s\n”, xxx |
同上 |
3. 打印数组
|
命令 |
作用 |
|
print *array@10 |
打印从数组开头连续10个元素的值 |
|
print array[60]@10 |
打印 array 数组下标从 60 开始的 10 个元素,即第 60~69 个元素 |
|
set print array-indexes on |
打印数组元素时,同时打印数组的下标 |
4. 打印指针
|
命令 |
作用 |
|
print ptr |
查看该指针指向的类型及指针地址 |
|
print *(struct xxx*)ptr |
查看指向结构体的内容 |
5. 打印指定内存地址的值
|
命令 |
作用 |
|
x/8xb |
以16进制打印数组 array 的前 8 个 byte 的值 |
|
x/8xw array |
以 16 进制打印数组 array 的前 16 个 word 的值 |
6. 打印局部变量
|
命令 |
左右 |
|
info locals |
打印当前函数局部变量的值 |
|
backtrace full |
打印当前栈帧各个函数的局部变量值,可以缩写为 bt |
|
bt full n |
从内到外显示 n 个栈帧及其局部变量 |
|
bt full -n |
从外到内显示 n 个栈帧及其局部变量 |
7. 打印结构体
|
命令 |
作用 |
|
set print pretty on |
每行只显示结构体的一名成员 |
|
set print null-stop |
不显示’\000’这种数据 |
七、函数跳转
|
命令 |
作用 |
|
set step-mode on |
不跳过不含调试信息的函数,可以显示和调试汇编代码 |
|
finish |
执行完当前函数并打印返回值,然后触发中断 |
|
return 0 |
不再执行后面的指令,直接返回,可以指定返回值 |
|
call printf(“%s\n”,str) |
调用printf函数,打印字符串 |
|
print func() |
调用func函数(call 命令也行) |
|
set var variable=xxx |
设置变量variable的值为xxx |
|
set {type}address = xxx |
给存储地址为 address,类型为 type 的变量赋值 |
|
info frame |
显示函数堆栈信息(堆栈帧地址、指令寄存器的值等) |
八、其他
1. 图形化
|
命令 |
作用 |
|
layout src |
显示源码窗口 |
|
layout asm |
显示汇编窗口 |
|
layout split |
显示源码和汇编窗口 |
|
layout regs |
显示寄存器+源码或者汇编窗口 |
|
winhegiht src+5 |
源码窗口高度增加 5 行 |
|
winheight asm -5 |
汇编窗口高度减少 5 行 |
|
winheight cmd + 5 |
控制台窗口高度增加 5 行 |
|
winheight regs – 5 |
寄存器窗口高度减少 5 行 |
2. 汇编相关
|
命令 |
作用 |
|
disassemble function |
查看函数的汇编代码 |
|
disassemble /mr function |
同时比较函数源代码和汇编代码 |
3. 调试和保存 core 文件
|
命令 |
作用 |
|
file exec_file *#* |
加载可执行文件的符号表信息 |
|
core core_file |
加载 core-dump 文件 |
|
gcore core_file |
生成 core-dump 文件,记录当前进程的状态 |

浙公网安备 33010602011771号