gdb可以让你查看程序的内部结构,打印变量值,设置断点,以及单步调试。功能十分强大。
调试前必须在gcc/g++下使用-g选项编译程序。
关于core dump
当程序执行了非法的指令时,为了帮助调试,操作系统将相应的内存中的内容镜像成一个文件供调试。
Unix中的file命令可检查core文件是由哪个文件生成的
通过检查core文件,结合程序的调试信息,我们可以找到大多数程序中的bug。
调试前必须在gcc/g++下使用-g选项编译程序。
关于core dump
当程序执行了非法的指令时,为了帮助调试,操作系统将相应的内存中的内容镜像成一个文件供调试。
Unix中的file命令可检查core文件是由哪个文件生成的
通过检查core文件,结合程序的调试信息,我们可以找到大多数程序中的bug。
启动
1.shell中启动gdb,然后用file加载程序,
2.gdb [path] [executable file name]
3.gdb [path][executable file name] [path][core]
当程序运行出错,我们需要检查core文件中提供的错误信息的时候使用这种方法调试程序。
2.gdb [path] [executable file name]
3.gdb [path][executable file name] [path][core]
当程序运行出错,我们需要检查core文件中提供的错误信息的时候使用这种方法调试程序。
常用命令
file 在gdb环境中加载一个待调试的程序
run/r 在完成断点设置后在gdb中运行该程序
shell 从gdb中临时返回shell,使用exit重新返回gdb环境
info 显示相关信息,常用的有info breakpoints,info threads等
break 设置断点,可以在程序的行号,函数名等处设置断点
如 break <line number>,break <function name>
next 不进入被调用函数的单步跟踪
step 进入被调用函数的单步跟踪
print/p 检查相应内存变量的取值情况,可使用格式表达输出变量内容
continue 继续执行程序。cont时它的简写
del 清除断点,参数和break命令一样
list 列源文件内容。前提是你需要在使用gcc编译的时候使用了-g参数 list <line number>从指定行显 示源程序
where 检查堆栈情况
up/down 切换当前堆栈中的位置。通过使用这个命令,可以查看不同调用关系中相关函数中变量的内容
thread 切换线程环境,对不同线程进行调试
set 设置gdb的一些内部参数
quit 退出
file 在gdb环境中加载一个待调试的程序
run/r 在完成断点设置后在gdb中运行该程序
shell 从gdb中临时返回shell,使用exit重新返回gdb环境
info 显示相关信息,常用的有info breakpoints,info threads等
break 设置断点,可以在程序的行号,函数名等处设置断点
如 break <line number>,break <function name>
next 不进入被调用函数的单步跟踪
step 进入被调用函数的单步跟踪
print/p 检查相应内存变量的取值情况,可使用格式表达输出变量内容
continue 继续执行程序。cont时它的简写
del 清除断点,参数和break命令一样
list 列源文件内容。前提是你需要在使用gcc编译的时候使用了-g参数 list <line number>从指定行显 示源程序
where 检查堆栈情况
up/down 切换当前堆栈中的位置。通过使用这个命令,可以查看不同调用关系中相关函数中变量的内容
thread 切换线程环境,对不同线程进行调试
set 设置gdb的一些内部参数
quit 退出
使用技巧
空行(直接回车) 重复上一个命令
tab 命令补全
空行(直接回车) 重复上一个命令
tab 命令补全