GDB程序调试工具

使用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    # 打印当前帧的信息
相关文章
相关标签/搜索