基本指令
设置断点
b aaaaa.c:222
设置临时断点
tb aaaa.c:333
条件断点
b aaa.c:10 if i==101
查看已设置的断点
info b
忽略3号断点N次
ignore 3 N
带三个参数 arg1 arg2 arg3 执行,
r arg1 arg2 arg3
继续运行
c
单步
n
单独走X步
n X
进入函数
s
显示所有的线程
thread apply all bt
删除第二个断点
del 2
clear 2
运行到函数返回
finish
fin
函数直接返回
return
打印指令
打印当前栈信息
bt
打印变量(print指令,简写p)
p var
按照指定格式输出
p /x var p /llu var p /f var p /d var p (int)var
打印指针内容
p *ptr
打印数组
p *array@10 打印从数组开头连续10个元素的值
p array[60]@10 打印第60~69个元素
设置打印格式
set print pretty on 对于结构体,每行只显示一名成员
set print null-stop 不显示'\000\
set print array-indexes on 设置数组显示索引
打印当前函数局部变量
info locals
打印内存值
x/nfu var
n:代表输出单元的个数
f:代表输出格式 x 16进制 o 8进制
u:输出单位 b 字节 h 2个字节 w 4个字节 g 8个字节
多进程调试
fork跟踪选择
show follow-fork-mode 查看目前的跟踪模式。
set follow-fork-mode parent 只跟踪父进程,不跟踪子进程,这是默认的模式。
set follow-fork-mode child 只跟踪子进程,放弃对父进程的跟踪。
想同时调试父进程和子进程,以上的方法就不能满足了。需要关闭fork脱离
show detach-on-fork 显示fork脱离状态
set detach-on-fork on 开启fork脱离
set detach-on-fork off 关闭fork脱离。这样可以通过切换同时调试父子进程,调试的进程运行,不调试的进程被阻塞,状态为T
显示进程信息
info inferiors
切换调试的进程到N
inferior N
多线程调试
查询线程信息
info threads
切换调试的线程到N
thread N
打印所有线程栈信息
thread apply all bt
发表回复