linux下C/C++调试工具 gdb的使用详解

程序中除了一些一目了然的BUG之外,都需要要一定的调试手段来分析程序到底错在哪了。到目前为止我们的调试手段只有一种:根据程序执行是的出错现象假设错误原因,然后在代码中适当的为止使用printf打印出结果,如果结果和预期一样,那么就基本证明了自己已经找到了错误原因了。

今天我们就来用一种非常强大的调试工具gdb,可以完全操控程序的运行,可以随心所欲的让程序走就走,让它停就停,并且可以随时查看程序中所有的内部状态,比如各个变量的值,传给函数的参数,当前执行语句的位置等等

Linux系统下安装gdb调试工具

要想使用gdb,必须要先安装,一般的linux发行版本都是自带gdb调试工具的,验证是否安装,在shell里面输入gdb 然后回车,如果出现如下图就证明已经安装了:

1.pic_hd

如果提示找不到命令,那就是你的系统没有安装gdb,需要安装后才能使用:

CentOS\Red hat系统使用下面命令安装:

sudo yum install gdb

Ubuntu系统请使用这条命令安装:

sudo apt-get install gdb

要想调试程序,就必须在源码使用gcc编译的时候 添加一个 -g 参数,让程序在编译的时候,产生调试信息。

gcc -g zploo.c -o zploo

gdb的常用命令:

help               可以简写为“h” 作用:按模块列出命令类

help class       作用:查看某一类型的具体命令

list                  可以简写为“l” 作用:查看代码,可跟行号和函数名

quit                可以简写为“q” 作用:退出gdb

run                 可以简写为 “r”     作用:全速运行程序

start               作用:单步执行,运行程序,停在第一行执行语句

next               可以简写为 “n”   作用:逐过程执行

step               可以简写为 “s”   作用:可以逐语句执行,遇到函数就进入函数内执行

info                可以简写为“i” 作用:查看gdb内部局部变量的数值,info breakpoints

frame             可有简写为“f” 作用:切换函数的栈帧

finish             作用:结束当前函数,返回到函数调用点

set                 作用:设置变量的值 set var n=100

run argv[1] argv[2]  作用:调试时在命令行传参

print              可以简写为“p”   作用:打印变量和地址

break            可以简写为“b”   作用:设置断点,可根据行号和函数名

delete           可以简写为“d”   作用:删除断点 d brealpoints NUM

display          作用:设置观察变量

undisplay      作用:取消观察变量

continue       可以简写为“c” 继续全速运行剩下的代码

enable breakpoints    作用:启用断点

disable breakpoints   作用:禁用断点

x               作用:查看内存 x/20xw  显示20个单元,16进制,4个字节每单元

watch       作用:被设置观察点的变量发生修改时,打印显示

i watch     作用:显示观察点

core文件   作用:ulimit -c 1024 开启core文件,调试时使用  adb a.out core

庄朋龙
庄朋龙

一个爱生活的技术菜鸟

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注