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

程序中除了一些一目了然的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