启动gdb
1、gdb 直接运行gdb,后续输入 run 程序 参数 开启调试
2、gdb 程序 //以某个程序启动gdb,后续可通过set args 参数1 参数2..... 设置程序启动参数
再 run 开启调试(run简写 r)
3、gdb attach pid 添加正在运行的进程到gdb调试 然后输入continue 继续 (continue 简写 c)
kill 停止程序
quit 退出gdb //简写q
断点 (break 简写b)
info break //查看断点 简写 i b
break 行号 //在当前行号出设置断点
break 文件名:行号 //在该文件行号处设置断点
break 函数名 //在该函数处设置断点 所有同名函数都会设置
break 类名:函数名 //在该类函数处设置断点
break 文件名:函数名 //在该文件的该函数处设置断点
break +偏移量 //当前代码行处加上偏移行数的地方设置断点
break -偏移量
break 断点 条件 //条件断点 break main.cpp:5 if i==1
tbreak 断点 //临时断点
enable 断点编号 //启用断点
diable 断电编号 //禁用断点
delete //删除所有断点
delete 编号 //删除某断点
执行
continue //简写 c 继续执行直到下一个断点处
step //简写 s 单步执行
next //简写n 逐过程执行
finish //跳出当前函数
jump 行号 //跳转到某行
jump 函数 //跳转到某个函数
where //显示当前执行的代码行和函数
堆栈
backtrace //简写bt 查看当前堆栈
bt num //查看num个数的堆栈
frame //显示当前帧
frame 栈帧号(bt显示最前面的某一帧编号) //切换到栈帧号的栈 切换后可以查看当前的一些信息
frame 帧地址 //切换到该地址的帧
up 帧数量 //切换到上多少帧 单独的up 表示切换到上一帧
down 帧数量 //切换到下多少帧 单独的down 表示切换到下一帧
info frame //查看当前帧信息
info frame 栈帧号 //查看栈帧号帧信息
源码
list //查看当前源代码 简写 l
list 行号 //显示指定行号的代码
list 函数名 //显示指定函数代码
list 开始行,结束行 //显示区间diamagnetic
list 文件名:行号 //显示该文件行附近代码
list - //往前显示
set listsize 数字 //指定显示代码的行数
show listsize //查看当前显示代码行数
directory 目录 //添加目录到源代码搜索路径 directory可简写 dir
show directorys //查看源代码搜索路径
变量
info args //查看当前函数参数 简写 i args
info locals //查看当前所有临时变量
print 变量名 //查看变量值 print简写p
ptype 可选参数 变量 //查看变量类型
参数: /r 以原始数据方式显示 不会代替typedef
/m 查看类时只显示成员变量
/M 查看类时只显示类方法 (默认选项)
/t 不打印类中的typedef
/o 打印结构体字段偏移量和大小
x //查看内存
多线程
info threads //查看所有线程
thread id //切换到id线程 切换线程后可以使用前面的命令查看当前线程的堆栈等信息
bread 断点 thread id //设置id线程的断点
thread apply id 命令 //在id线程上执行命令(跨线程执行)多个线程可以写id1 id2 id3...,如果为所有线程执行命令 id写all,例:thread apply 2 bt //查看2号线程的堆栈