GDB调试常用指令

GDB调试常用指令

基本指令

设置断点
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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注