gdb调试工具的使用
简介
简单地说就是一个调试工具。它是一个受通用公共许可证即GPL保护的自由软件。
使用
使用gdb调试工具时,在gcc打包为二进制文件时需要指定-g参数表示在该程序中添加调试语句
当编译好后,执行gdb 需要被调试的程序
相关命令
list/l
列出被调试程序的源代码,根据源码向指定位置设置断点
显示出源代码的下一页使用list / lbreak/b
设置断点:break / b 行号
设置条件断点:b 行号 if 条件当满足条件时才会执行,一般用在循环/递归语句run/r
运行程序
不用设置断点直接执行,如果遇到程序出现错误时会显示出错的行数,可快速找到错误
该命令还可以在后面添加参数,每个参数以空格分开,它表示向main函数中传入参数n(next) /S(step)n/S表示执行下一条指令
它们的区别在于执行函数的时候,当使用n来执行的时候会直接越过函数不会进入到函数内部执行而是直接执行到下一行,而S则反之
在调试时可以按需选择如何使用这两个命令
gbd调试时有一个小毛病就是在进入到函数内部时如果是库函数就会报找不到那个文件所以在使用时要注意执行遇到库函数时要使用n来执行p
显示指定变量的值p 变量名continue
继续执行断点后续指令quit
退出当前调试finish
结束当前函数调用,回到调用点set argsset args args1 args2 ..
在执行程序前设置命令行参数:info b
查看gdb调试表中调试的内容ptype
查看变量类型:ptype 变量bt(backtrace)
列出当前程序正存活着的栈帧
它通常与frame配合使用frame
根据栈帧编号,切换栈桢
它通常与bt配合使用set follow-fork-mode [child | parent]child: 跟踪子进程parent: 跟踪父进程
display&undisplaydisplay: 设置跟踪变量undisplay[编号]: 取消跟踪变量
知识点
栈帧: 随着函数调用而在stack上开辟的一片内存空间, 用于存放函数调用时产生的局部变量和临时值