GDB调试工具的使用


GDB调试工具的使用(C/C++)

一、简介

  1. 为什么需要用GDB

    作为一名程序员,最大的梦想就是写出不带bug的代码,但是现实难免有时候不如人意;所以我们常常需要借助一些工具帮我们查找代码的语法错误和逻辑错误。编译时我们会采用gcc进行语法错误的检查,而gcc并不能为我们检查程序上逻辑的错误,所以需要通过调试工具来协助我们排查逻辑错误,而linux下常用的调试工具就是GDB了。或许各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX与linux平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。

  2. GDB的功能

    (1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序

    (2)可让被调试的程序在你所指定的调置的断点处停住

    (3)当程序被停住时,可以检查此时你的程序中所发生的事

    (4)你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG

二、安装

以centos7举例,使用root用户登录,使用如下命令进行安装

yum -y install gdb

备注:上述指令可以多次执行,当你安装过一次后,再次执行则会去检查是否有更新,有的话就会自动安装最新版本的gdb

三、使用说明

使用gdb可以分为两个步骤,第一步是编译,第二步就是运行调试

  1. 编译

    默认gcc编译出来的可执行文件是不包含源代码的,所以编译时后需要加入-g参数进行编译

gcc -g -o test test.c

  1. 调试

gdb test

四、基本调试命令

命令 命令缩写 命令说明
set args 设置主程序的参数
break b 设置断点,b 12表示在第12行设置断点,可以设置多个断点
run r 开始运行程序, 程序运行到断点的位置会停下来,如果没有遇到断点,程序一直运行下去,直到主函数退出
next n 执行当前行语句,如果该语句为函数调用,不会进入函数内部执行
step s 执行当前行语句,如果该语句为函数调用,则进入函数执行其中的第一条语句。注意了,如果函数是库函数或第三方提供的函数,用s也是进不去的,因为没有源代码,如果是您自定义的函数,只要有源码就可以进去
print p 显示变量值,例如:p name表示显示变量name的值
continue c 继续程序的运行,直到遇到下一个断点
set var name=value 设置变量的值,假设程序有两个变量:int ii; char name[21];set var ii=10 把ii的值设置为10;set var name="vies" 把name的值设置为"vies"
quit q 退出gdb环境