程序中除了一些一目了然的BUG之外,都需要要一定的调试手段来分析程序到底错在哪了。到目前为止我们的调试手段只有一种:根据程序执行是的出错现象假设错误原因,然后在代码中适当的为止使用printf打印出结果,如果结果和预期一样,那么就基本证明了自己已经找到了错误原因了。
今天我们就来用一种非常强大的调试工具gdb,可以完全操控程序的运行,可以随心所欲的让程序走就走,让它停就停,并且可以随时查看程序中所有的内部状态,比如各个变量的值,传给函数的参数,当前执行语句的位置等等
安装gdb
要想使用gdb,必须要先安装,一般的linux发行版本都是自带gdb调试工具的,验证是否安装,在shell里面输入gdb 然后回车,如果出现如下图就证明已经安装了:
如果提示找不到命令,那就是你的系统没有安装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
最后修改于 2015-11-22