使用gcc/g++编译程序时加-g选项以方便调试。启动gdb时不打印提示信息能够加-q选项。函数
设置系统容许产生core文件:调试
$ulimit -c unlimited
调试由test程序产生的core文件:code
$gdb ./test core
设置输出信息时的分页功能相关命令it
set pagination on # 或者 set height <n> set pagination off # 等同 set height unlimited show height # 查看输出页面高度 show width # 查看输出页面宽度
列出全部函数io
info functions [regex] # 不带regex的话输出数量通常不少 info functions foo # 列出含有foo的函数名
打断点。编译
b <line> # 在指定行打断点 b 12 b <func_name> # 在指定函数打断点 b main b <filename>:<line> # 在指定源文件指定行打断点 b test.c:15 tb <line> # 打临时断点,命中一次后失效 b 15 if i==0 # 打条件断点 info b # 打印全部断点信息
在运行r
以后会停留在断点处,若是断点都在同一个函数中,按n
以后是不会进入其余函数的,只会直接执行。此时能够在执行函数的那一行按s
来进入该函数。function
若是按了s
进入了某个不带调试信息的函数,那么接下来按n
都会在该函数内逐行执行,能够经过敲finish
快速运行完该函数。或者能够敲return <xxx>
来快速跳过下面的代码行而直接返回。test
在运行程序的过程当中,能够直接调用某个函数,使用的是call或print指令变量
call foo(234) print(foos("abc"))
打印当前域变量gcc
p var # var是变量名
打印全部堆栈或者指定的帧
bt # 打印全部堆栈 frame <number> # 打印并跳转到指定序号的帧 frame <addr> # 打印并跳转到指定地址的帧 info frame # 打印当前帧的信息